Excel VBA 質問スレ Part52

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/01/27(土) 20:25:05.67ID:Xe+uGT7T
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/

※前スレ
Excel VBA 質問スレ Part51
http://mevius.2ch.net/test/read.cgi/tech/1510107990/
523デフォルトの名無しさん
垢版 |
2018/03/25(日) 05:04:38.97ID:U5SlEUJl
イタリアのExcel割合を調べてくれたまえ。
2018/03/25(日) 21:29:27.29ID:jcp+Rd0d
中小とか関係無いだろ。
大企業でExcel入ってない所なんて聞いたこと無いぞ。
2018/03/25(日) 22:39:02.13ID:MnBbK5My
大企業はエクセルの他にTableauとかSAPとかSalesforceみたいなの入れてたりするやん
大抵の中小にはエクセルしかない
2018/03/25(日) 23:08:52.28ID:jcp+Rd0d
>>525
入っててもExcel使ってるだろ。
それも、そういうのより有用にな。
お前が言ってるのはプラスアルファの部分で必須という点ではExcelの方が上だぞ。
527デフォルトの名無しさん
垢版 |
2018/03/25(日) 23:31:43.16ID:IZk64w7g
Excelのほかにはちゃんとしたデータベースが導入されていれば
事務部門には必要にして十分だろう
528デフォルトの名無しさん
垢版 |
2018/03/25(日) 23:34:10.07ID:U5SlEUJl
Excelの最大の問題点は情報の共有。
日本の大企業がExcelに頼っているならそれが弱点かもしれない。
2018/03/26(月) 00:27:14.12ID:KUO5BBWu
>>528
働いたこともないニートが妄想で語るなよ
2018/03/26(月) 11:51:23.00ID:I0XgyLKy
情報の共有ってことだと社内データベースが不可欠だけど素人では運用するのが難しい。
このネックはなかなか解消できないのかもね。
開発ツールとかはただでいくらでも手に入るし運用も問題にならない。
ルールで導入できないとかそういうのは自業自得だから。
531デフォルトの名無しさん
垢版 |
2018/03/26(月) 12:00:07.22
>>528
Excelの共有機能を使えば万事解決やろ
532デフォルトの名無しさん
垢版 |
2018/03/26(月) 12:06:51.37ID:WZ1ZCWjW
>>531
無駄だろな。
俺は階層ディレクトリにも疑問を持っているのだが、おそらく理解する人は少ないだろうなあ。
一番被害を被ってるはずのウェブ屋さんが「階層ディレクトリは素晴らしい」と言い張りそうな気がする。
533デフォルトの名無しさん
垢版 |
2018/03/26(月) 12:08:37.31ID:WZ1ZCWjW
業務用のパッケージソフトってだいたい300万位がエントリーレベルなので、そうおいそれと買い換えられない。
ここもネックになってる。
2018/03/26(月) 12:20:45.13ID:I0XgyLKy
ただで手に入るSQLSever ExpressとVisual Studio Express で機能的には十分なんだけどね。
運用が難しいってだけじゃなくて、「ツールを導入するのが好きな人」の陰謀なんじゃないかと勘ぐっているw
2018/03/26(月) 13:06:59.27ID:6T2vyhwF
業務用ソフトってのはサポート込みなんだけど
どこの企業でも運良くパソコンオタクが入社して時間を持て余してるわけじゃないんで

データのバックアップから非常用の電源まで、まとめて面倒を見るのは大変だし、いちいち調べて対処するのは効率が悪い
ノウハウを持った会社からパッケージで買った方がずっとコストも安いし対応も早いし安心できる
2018/03/26(月) 13:23:21.66ID:0ERRGh/D
VBEのコードウインドウの背景色を濃いグレーに変えたのですが、プロシージャの区分線の色も濃いグレーのために背景と同化して見えなくなってしまいました
プロシージャの区分線の色を変更する方法ってありませんか?
2018/03/26(月) 13:23:49.36ID:I0XgyLKy
>>535
業務ソフトじゃなくてツールの話をしてるんだけど?
定型業務以外の、何か調べてレポートしたりとかマーケティング向けの調査とかそういうの。
538デフォルトの名無しさん
垢版 |
2018/03/26(月) 13:29:25.15ID:WZ1ZCWjW
300万の製品を10年使われると年間30万、月2万5千円だろ。
だったら月2万5千円で最新バージョンが使い続けられるといいのだがな。
アップデートが途中で打ち切られるので未だにXPがあるんだよな。
XPで何でもできるならそれでもいいんだが、新しいソフトはXPサポートしないしな。
300万は微妙すぎる金額だよな。
まあ微妙だからこそ、その価格に集中するんだろうけど。
539デフォルトの名無しさん
垢版 |
2018/03/26(月) 13:31:09.84ID:WZ1ZCWjW
代々受け継がれてるExcelのシートも結構あって、そこで問題になってるのが情報の共有なんだよな。
2018/03/26(月) 13:56:24.07ID:Fzg6eq8C
小はともかく中規模の事業所はデータの整理も進んできてる
古いデータを必要な物からデータベースに落とし込んで再利用可能にしてる
それをやらないと競争に勝てないんで
2018/03/26(月) 22:38:29.48ID:RlMBpq5I
むしろ小規模ならクラウド上に乗っけて
GITとかで管理すればいいんじゃないの?
2018/03/27(火) 00:06:28.13ID:i+K8FLsM
REST APIをコールしたいんだがVBAだとどんな選択肢がある?
IEインスタンス使う方法以外で
2018/03/27(火) 07:54:36.52ID:/jbLr42o
>>525
その辺のパッケージにマトモなBI作ってない企業は出力したデータをExcelで加工する仕事がある
2018/03/27(火) 08:48:00.11ID:OGHJWfFq
>>536
誰もわかんないですか?
2018/03/27(火) 09:00:02.17ID:Rlp7FXcd
ID:OGHJWfFq の頭の中では…

なぜ私が質問したのにみんなスルーしてるの!
私が質問したら答えるのが当然でしょ!
答えるのが当然なのに答えないってことは、つまり知らないって事よね!?
  ↓output

>>544 誰もわかんないですか?
2018/03/27(火) 09:52:14.28ID:se4xCVEM
>>542
RESTのことを知らないのであれだけど
httpリクエスト(getとかpost)する方法のこと?
2018/03/27(火) 11:09:50.91ID:nMHUA4Cr
>>542
Application.WorksheetFunction.WebService()
2018/03/27(火) 12:10:18.56ID:Z1ln/9g0
>>545
いえ、わかんないの?って感じで煽ったらそれぐらい知ってるわ!ってノリで答えてくれる人が出てくるかなと思いまして
549デフォルトの名無しさん
垢版 |
2018/03/27(火) 12:20:24.49ID:nnyxYnJQ
お前ら関係ない事まで答えたがるくせにw
何変ないじり方してんだよw
2018/03/27(火) 22:07:01.34ID:8sNHT6Rv
Dim c As Byte

For c = 1 To 43
処理
Next c

For c = 43 To 1 Step -1
ここでオーバーフローのエラーになります。cの中身は44でByteの範囲内です。
エラーになる原因を教えてください。
2018/03/27(火) 22:46:58.40ID:N/whD29M
c = -1
でもオーバーフロー
Byte型にマイナスがだめ
552デフォルトの名無しさん
垢版 |
2018/03/27(火) 22:48:09.36
ケチケチしないでLong使えやwwwww
2018/03/27(火) 22:48:40.35ID:8sNHT6Rv
ありがとうございます。型かえます。
2018/03/28(水) 03:53:43.79ID:Cdw31wh4
>>553
いいってことよ(´・ω・`)b
555555
垢版 |
2018/03/28(水) 03:54:06.82ID:Cdw31wh4
555げっち(´・ω・`)b
2018/03/28(水) 21:27:49.05ID:b61/mHBH
-1でオーバーフローするってのは判る。それに今どき積極的にByte型を
使う理由もそうないだろうって事も。
だけど>>550でオーバーフローになる理由が判らない。
>>550ではループ終了時にも値はマイナスにはなってないよね?
2018/03/28(水) 21:33:27.08ID:fW+sJxWu
ぐぐってみたら10年以上前からなんやねんこれってなってる
ttps://www.ozgrid.com/forum/forum/help-forums/excel-general/66761-overflow-error-in-for-loop-stepping-backwards-with-byte
2018/03/28(水) 21:39:46.02ID:b61/mHBH
>>557
ありがと。まぁループ変数にByte型を使うなって事で ┐(´д`)┌ヤレヤレ
2018/03/28(水) 21:48:47.59ID:c16Hwi83
For文の内部処理で-1をバイト型にキャストしようとして詰んでしまってるんじゃなかろうか
2018/03/28(水) 22:58:28.63ID:b61/mHBH
Step -1 の-1をDim c As Byte のByte型に合わせようとしたけど、Byte型では
範囲外 オーバーフローだぞ…と
なるほど
2018/03/28(水) 23:05:20.91ID:qqTeUvjF
Variaant型変数を宣言して整数を代入した場合
Dim i
i = 65535
i = i + 1
して65536にしてもオーバーフローエラーにはなりませんでした。
Variant型変数の整数の内部表現はLongが標準なんでしょうか?
2018/03/29(木) 01:39:16.45ID:1S4zmkyv
>>561
いっぺんヘルプ読んでみ
ttps://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/variant-data-type
2018/03/29(木) 03:39:40.96ID:Vz9b93Ky
急にオートメーションエラーが発生するようになったんだが。。。
564563
垢版 |
2018/03/29(木) 03:47:53.56ID:Vz9b93Ky
ググったところ
以下のリンク見て、動くようにはなったが、納得できない感じ
ttps://social.msdn.microsoft.com/Forums/ja-JP/1522c74b-17e7-402d-8a87-2d1a6af1feab/excel-2016?forum=vbajp

Windows Update で動かなくなるとか勘弁
2018/03/29(木) 20:05:15.88ID:YuebNQaY
listviewで教えてください

幅を自動調整したい時、ぐぐると「widthプロパティを-1か-2にすべし」と書いてあるのですが、
やってみると「プロパティの値が不正です」とエラーになります。
フォームエディタのプロパティ画面でwidthを直接設定しようとしたら、そもそも「0以上の値を
入力してください」と言われてしまいました。

listviewの仕様が変わるか何かあったのでしょうか。
それとも、実は同名の別のコントロールなのでしょうか。

listview事態は、ツールボックスを右クリックしてその他のコントロールから
Microsoft ListView Control, version 6.0
というのを有効にしています
566デフォルトの名無しさん
垢版 |
2018/03/30(金) 07:00:19.72ID:r/zfsTLq
こんなに詳しいならVBAなんかじゃなくてドットNETに移行したら?
出来る範囲も桁違いに多いし技術的にはVBAとそんなに変わらんじゃん
そう言うわけではないの?
2018/03/30(金) 07:10:50.00ID:MnRWcQoL
>>566
> VBAなんかじゃなくてドットNETに移行したら?
MSに言ってくれよ...
568デフォルトの名無しさん
垢版 |
2018/03/30(金) 07:25:23.82ID:r/zfsTLq
そうじゃなくてエクセルを使う必要なんてないんじゃないのって事です
.netでもエクセル以上の事も出来るし
エクセルの制約がない分簡単な気がするんだけど
しかもコード的にも少ししか変わらないし
2018/03/30(金) 07:55:52.10ID:M36Hc3ht
処理対象がエクセルならvbaのほうが手軽
そうじゃないなら他の言語のほうがいい
とか言いつつ俺はエクセル処理にpowershell使ってるけど
2018/03/30(金) 08:07:18.25ID:O1RjHycM
個人ならいいけど会社だとエクセル使いの方が多いから合わせないとならんしな

スマートで無いやり方をしているのは思いつかないからではなく他に方法がないからなのであって、
その代替手段は「君だけが思いつける冴えたアイディア」ではないんだよ
2018/03/30(金) 08:24:56.25ID:MnRWcQoL
>>568
> そうじゃなくてエクセルを使う必要なんてないんじゃないのって事です
お前のところがそう言う環境ならそうすればいい

> .netでもエクセル以上の事も出来るし
Excelを越える操作性を持つアプリを開発できるの?

>>569
> とか言いつつ俺はエクセル処理にpowershell使ってるけど
PowerShellは癖あるけど慣れると楽だよね
Windows 10 に移行して PowerShell 5.0 の class や enum が使えるようになったから嬉しい
と思ってたら Excel も 2013 → 2016 になってて以前のスクリプトがエラーになる...
新年度はまずはこの修正からだな
2018/03/30(金) 08:42:59.54ID:+sennHug
ExcelはUIとしては優れているじゃないか。
これを利用しない手はない
573デフォルトの名無しさん
垢版 |
2018/03/30(金) 08:51:55.14ID:GVvaPPCb
VisualStudioにOfficeSDKがあるからアプリとして簡単に作れると思うけど
豊富なオプジェクトツールもあるし
スピード速いし制約が少なくて簡単だと思うけどね
まぁ好きなの使えば良いんだけどね
2018/03/30(金) 11:47:00.45ID:+sennHug
簡単にっていうレベル感によると思うけど、どんなもん?
575デフォルトの名無しさん
垢版 |
2018/03/30(金) 13:28:47.23ID:rW3gxcuW
>>574
ここの質問の出来たり意味とか分かるレベルならそのまま移行出来ると思うくらい簡単
文法はほぼ一緒
エクセルの制約って結構キツくて自由がないのでやりたい事も大回りしながらになるし
2018/03/30(金) 13:37:44.27ID:O1RjHycM
簡単に(ただしVisual Studio使用許可を会社に貰う労力は除く)
577デフォルトの名無しさん
垢版 |
2018/03/30(金) 17:44:57.97
Excelは宇宙
2018/03/30(金) 20:29:10.14ID:Gon83GvH
VSのライセンスを事務屋の分まで手配してくれる会社ってどんなところだろうか。
2018/03/30(金) 20:50:22.47ID:MnRWcQoL
>>573
VisualStudio OfficeSDKでググってもOffice Developer Tools(Visual Studio Tools for Office (VSTO))の話とかしか出てこない
お前さんほんとに使ったことある?
2018/03/30(金) 21:08:20.75ID:PhjyEwlD
>>568
>しかもコード的にも少ししか変わらないし

お前VB.Net仕事で使ったことないだろ
いくらなんでも舐め過ぎだ
コード的にも少ししか変わらない?
本当にうわべしか見てないのによくそんなことが言えるな
文法的にほぼ同じというだけで
内容的には同じフレームワークのC#とかの方に遥かに近いわ
お前、そんなこと言いながら.Net系の仕事に入ったら一発で首飛ぶぞ
2018/03/30(金) 21:18:35.20ID:gQAlhwsH
>>571

PowerShell + Excel か〜
なんか面白そうだから勉強してみよう
2018/03/30(金) 22:28:42.55ID:rpshcViU
>>580
なんでそんなに必死なの?
2018/03/30(金) 22:41:59.65ID:NsVRzYaI
えっと、OpenXMLのことかな?
584デフォルトの名無しさん
垢版 |
2018/03/30(金) 23:23:13.75ID:7HVZnQv9
教えてください。

特定のフォルダの中にxlsファイルが一つと、xlsmファイルがあります。
これはシステムの前提です。
xlsファイルが2つ以上ある場合はエラーが出るよう、以下のように作りました。


ThisPass = ThisWorkbook.Path

With CreateObject("Scripting.FileSystemObject")
For Each ff In .GetFolder(ThisWorkbook.Path).Files
If LCase(.GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With

If N > 1 Then
MsgBox "xlsファイルが" & N & "個見つかりました。" & vbCrLf & _
"xlsファイルは1ファイルだけおいてください。" & vbCrLf & _
"プログラムを終了します。 "
Application.Quit
ThisWorkbook.Close SaveChanges:=False

End If

質問ですが、
そのフォルダの中に一つだけあるxlsファイル名を取得するには
どうしたら良いでしょうか。
"*.xls"の条件に合うファイル名を返したいです。
2018/03/30(金) 23:26:17.70ID:Edi5ddFk
Dir関数を使えば良いんじゃないの
2018/03/30(金) 23:29:47.99ID:BIk3pBCX
既にfso使ってるならそのif分の中でGetBaseNameで取得すりゃいいのでわ
酔っ払ってんのか?
587デフォルトの名無しさん
垢版 |
2018/03/30(金) 23:31:17.74ID:7HVZnQv9
>>585
Dir(ThisWorkbook.Path & "\*.xls")

のような感じでしょうか?

(ThisWorkbook.Pathのところに何となく違和感がありますが。)
588デフォルトの名無しさん
垢版 |
2018/03/30(金) 23:34:41.59
>>584
If 〜 Then N = N + 1 を複数行にして

If 〜 Then
If N = 0 Then strFirstFileName = ff.Name
N = N + 1
End If

にすればいい
589デフォルトの名無しさん
垢版 |
2018/03/30(金) 23:46:29.02ID:7HVZnQv9
>>586
("Scripting.FileSystemObject") の部分、ちゃんと理解できておりませんでした・・・。
うまく使えばGetBaseNameでファイル名が取得できるのですね。
ありがとうございました。

>>588
そのコードで今回はファイル名取得できました。

勉強始めたばっかりで、難しいですが面白いです!
ありがとうございました!
2018/03/31(土) 09:26:07.32ID:H7P83KyH
他のテキストエディタなどで書いたコードをvbeに貼り付けるのってダメなんでしょうか?
ダイアログを表示するのに文字列を直接指定している部分が引っかかっているらしくて
vbeの方で同じ文字列を再度打ち直すと正常に動作してくれるのですが
原因なにかわかりませんか?
2018/03/31(土) 09:58:16.23ID:XNLdwQIM
>>590
ユニコード
2018/03/31(土) 16:00:53.86ID:H7P83KyH
ゴミvbにunicode非対応とかなんでこんなのが現代に君臨してんだろう
ありがとうございました
2018/03/31(土) 16:31:10.15ID:qcKBqECv
>>592
いいってことよ(´・ω・`)b
2018/04/01(日) 14:16:21.26ID:YzkMtc7h
VBAのテキストボックスの .LineCount ってどういう時に使いますか?
2018/04/01(日) 14:19:52.40ID:YzkMtc7h
>>594

というのも、例えばInteger型の変数iに代入しようとして、

i=テキストボックス名.LineCount

ってやると、

実行時エラー '2185':
LineCountプロパティの値を取得できません。このコントロールはフォーカスを持つ必要
があります。SetFocusメソッドによって、このプロパティまたはメソッドが参照されるま
えにフォーカスが移動しました。

ってエラーになったもので。
596デフォルトの名無しさん
垢版 |
2018/04/01(日) 16:31:21.48ID:OrI5htLK
>>595
さあね、SetFocusとセットで使って問題ないシーンだったら使えばいいんじゃね?
なんでそういう作りになってるかはしらんけど、歴史的な理由ってやつじゃね?
LineCountは全部品共通で使い回してる内部変数を参照していて
フォーカスが当たってるときだけ値を保持してるとか
2018/04/02(月) 00:58:07.54ID:4AdYvMWY
Ruby で、Selenium WebDriver で、ブラウザの自動操作をすると、
入力コントロールに入力するには、フォーカスが必要だったかな?

フォーカスは、キーボードなどの入力装置を独占するから、
OS内で同時に、1つのアプリの、1つのコントロールしか持てない
598デフォルトの名無しさん
垢版 |
2018/04/02(月) 12:20:32.51ID:7SJzoey2
それは単なるwebdriverの仕様あるいは方針にすぎん
2018/04/02(月) 13:41:52.74ID:zMeLik1V
誰か教えてください。いくら調べても分からなかった・・・

近似曲線を引くマクロを書いて、ボタンに登録してるのですが、この動作を行うと
1回目の曲線が変な形で残ってしまう。
1回目の曲線を消したいのですが、どうしても消し方がわからない。

Private Sub CommandButton1_Click()

Dim num As Integer

num = MovingAvgUF.TextBox1.Value

ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveChart.FullSeriesCollection(1).Trendlines.Add

ActiveChart.FullSeriesCollection(1).Trendlines(1).Select
With Selection
.Type = xlMovingAvg
.Period = num
End With

With Selection.Format.Line
.ForeColor.RGB = RGB(0, 0, 0)
.Weight = 1.5
End With

Unload MovingAvgUF

Range("A3").Select

End Sub
2018/04/02(月) 16:44:10.21ID:Ts/JiFXW
>>599
実行のたびにAddしているので、新しく追加されているからでしょう
たぶん移動平均の期間を可変にしたいのだろうから
ない場合だけAdd、すでにあれば既存のパラメーターを変更するようにする
あとActivateとかSelectionは無駄なのでやめる

Dim num As Integer
Dim graph
num = MovingAvgUF.TextBox1.Value
Set graph= Worksheets(1).ChartObjects(1).Chart.SeriesCollection(1)

If graph.Trendlines.Count = 0 Then
 With graph.Trendlines.Add
  .Type = xlMovingAvg
  .Period = num
  .Format.Line.ForeColor.RGB = RGB(100, 0, 0)
  .Format.Line.Weight = 1.5
 End With
Else
 graph.Trendlines(1).Period = num
End If

Unload MovingAvgUF

これでどうでしょう
グラフ指定(Set句のところ)はそっちの環境に合わせて書き換えてね
601デフォルトの名無しさん
垢版 |
2018/04/02(月) 17:15:58.69ID:zMeLik1V
>>600
うわ出来ました。
マジでありがとうございます。
助かりました。
2018/04/03(火) 12:12:56.67ID:eJeJFdNC
VB6で計算ボタンをボタンを押すと各フォームのテキストボックスの値とか使っていろいろ自動で計算してフォームが勝手に閉じられるんですが、デバッグで1個ずつ追ってくと途中で止まってしまうのって仕方ないんですかね?
gotfocusやらclickとかで途中で無理やりやってるとは思うですけど、通る順序を追うにはどうしたらいいですか?
2018/04/03(火) 13:11:49.11ID:Coyy9Cz8
VB6
2018/04/03(火) 21:25:59.19ID:q0sRpwvy
A1とB1は空白C1からZ1まで日付型がはいっています。
3月分の最後
20180330と2018331がないので20180328を拾いたい。
4月分の初め
20180401と20180402が無いので20180403を拾いたい。
日付型------------------------------

空白   (A1)
空白   (B1)
20180325(C1)
20180326(D1)
20180328(E1)
20180403(F1)
20180405(G1)
20180406(H1)
  ・
  ・
  ・
20180505
------------------------------------------
Sub 日付
Dim 最小数 As long, 最大数 As long
 最小数= WotksheetFunction.Dmin(Rnge("1:1"),range("C1"),"200180401")
 最大数= WotksheetFunction.Dmin(Rnge("1:1"),range("C1"),"200180331")
End Sub
----------------------------------------
これだとうまくいかない・・・・。
何か間違っているのでしょか・・・?
2018/04/03(火) 21:46:25.59ID:UZjK1Wan
何がしたいのか説明を読んでもコードを見てもさっぱりわからん
わからんけどエスパーすると”201803”で検索して最後に見つかったセルと”201804”で検索して最初に見つかったセルでいいんじゃないの?
2018/04/04(水) 08:15:37.03ID:cLM6HPyb
>>604です。

>>605
説明が下手でごめんなさい。
20180401〜現在までのデータをダウンロード(システム仕様の為、細かい設定が出来ない)
■データのフォーマット■
土日祝はデータがない。
A2とB2からA○B○まで製品番号と製品名が入っている。

4月分、5月分、6月分、、、、、
分けるように作りたい。
※AとBは残す
月初と月末の日付が入ってないとずれてしまう。(セル取得が出来ない。)
2018/04/04(水) 11:56:03.28ID:k8docH3r
MID("20180325",5,2)で"03"が取り出せるから、それで判断すればいいんじゃないの。
色んな日付上の制約があるならLEFT(),MID(),RIGHT()使い分けで。
2018/04/04(水) 12:58:19.17ID:ZiMW+8i0
>>607
ありがとうございます。
その方法がありましたね・・・。
勉強になります。
------------------------------------------------------------

関数
{=MIN(IF(20180201<=1:1,1:1,""))}
{=MAX(IF(20180231>=1:1,1:1,""))}
これだとうまく行きますが、VBAだとどうやって作るのかなと思っていました。
2018/04/04(水) 13:11:13.67ID:A+wsnEra
素直にfor回せ
2018/04/04(水) 13:19:04.73ID:ZhVuw5lC
>>609
その方法になりますね。
私は勉強不足ですみません。
m(_ _)m
2018/04/04(水) 13:36:26.96ID:p0Y8un4q
自動車業界で例えると
1、トヨタ、日産、ホンダ
2、1の下請け企業名
3、2の下請け企業名
4、3の下請け企業名
.
.
.

としたとき、2のAの企業名を入力したらそこからの下請け企業を抽出したいんですが、その場合のエクセルのシートの作り方をどのように作れば効率がいいですか?
2018/04/04(水) 16:08:01.72ID:v9gnJiNk
シートAAAにあるテーブル1の種目という項目のデータを
ComboBox1のリストに代入するのは下記マクロでできました

Private Sub UserForm_Initialize()
Dim KV As Range
Set KV = Sheets("AAA").Range("テーブル1[種目]")

With ComboBox1
For i = 1 To KV.Rows.Count
.AddItem KV(i)
Next i
End With

End Sub

さて、ここからが質問です
テーブル1にフィルターをかけた後に、フィルターで残った種目という項目のデータを
ComboBox1のリストに代入するのはどうしたら良いのでしょうか?

よろしくお願い致します
2018/04/04(水) 16:56:39.61ID:JVI42cK6
伝票番号 顧客名 商品名 数量 価格 金額

というデータがあり、同じ伝票番号に3〜6行の取引データがあります
(1枚の伝票に複数の商品の販売記録がある)
同じ伝票番号の行を、1行残して削除し、1伝票番号に1行というデータに作り替えたいと考えてます。

対象となる行数は50万行

今は、ある伝票番号の一番上の次の行と
その伝票番号の一番下の行を範囲で削除し、
この処理を繰り返しているのですが、とても時間がかかります

どういう方法なら早く処理できるでしょうか?
2018/04/04(水) 17:13:35.91ID:2HxBBF0q
>>611
ExcelよりAccessの仕事なのでAccessがあればそちらをオススメしたい
Excelでやるならワークシート関数がいいと思う
データが正規形になっていればあとからいかようにでもなるので
シートは1枚でもいけるんじゃないかな(たぶん)

>>612
フィルター後のセルだけをとってくるメソッドがあったはず
頻繁にフィルター条件を変えるなら、最初に全部配列につっこんで
あとは配列をフィルターしたほうがパフォーマンスが出せる
2018/04/04(水) 17:27:12.13ID:2HxBBF0q
>>613
単純に重複を削除したいだけでしょうか?
ぶら下がってるデータを1つにまとめつつでしょうか?

単純に重複削除ならフィルターでできたはず
もしくはRemoveDuplicatesというメソッドで
つかい方はこちら
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/range-removeduplicates-method-excel
2018/04/04(水) 18:13:35.11ID:JVI42cK6
>>614
>>615
ありがとうございました!とても参考になりました!
617デフォルトの名無しさん
垢版 |
2018/04/08(日) 00:48:16.79ID:GhjqeU3J
質問です。

Dim Wb2 As Workbook

buf = Dir(ThisPass & "\" & strfirstfilename)
Do While Len(buf) > 0
If LCase(buf) Like "*.xls" Then

buf2 = Left(buf, InStrRev(buf, ".") - 1)
End If
buf = Dir()
Loop

Set Wb2 = Workbooks(strfirstfilename)  ←”インデックスが有効範囲にありません”
というエラーが発生します。

strfirstfilenameには”AAA_original-コピー.xls”が入っており、ここまではOKです。

なぜインデックスが有効範囲にないのか・・・。
どなたか教えてください。
よろしくお願いします。
618デフォルトの名無しさん
垢版 |
2018/04/08(日) 01:24:05.18ID:bco3gmLh
>>617
ワークブックファイルを開いてないから
2018/04/08(日) 02:53:42.68ID:SzguuQfE
>>617
ファイルシステムの場所を示す「パス」はpassじゃなくてpathだよ
2018/04/08(日) 07:04:38.01ID:U7ChR0a6
まとめるとこう
Set Wb2 = Workbooks.Open(ThisWorkbook.Path & "\" & strfirstfilename)
621デフォルトの名無しさん
垢版 |
2018/04/08(日) 11:56:26.77ID:GhjqeU3J
>>618
開いてなかったですね・・・。
ありがとうございます
622デフォルトの名無しさん
垢版 |
2018/04/08(日) 11:57:47.06ID:GhjqeU3J
>>619
pathですね。お恥ずかしい・・・。
ありがとうございました。
623デフォルトの名無しさん
垢版 |
2018/04/08(日) 11:59:21.51ID:GhjqeU3J
>>620

このプログラムの直後に
Workbooks.Open (ThisPath & "\" & strfirstfilename)
があったので、それをsetの前に持ってきて成功しました。

ありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況