Excel VBA 質問スレ Part75

■ このスレッドは過去ログ倉庫に格納されています
2022/02/09(水) 14:24:32.62ID:I0u44nFvd
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/03/25(金) 17:36:57.23ID:378bs0UD0
>>530
慣れでスラスラ書けるようにはなるだろうけど
どちらかといえばググり力の方が必要だよ
2022/03/25(金) 18:03:42.37ID:rDRC/qkL0
ググり方というより、公式ヘルプでの確認が大事だと思うんだが
いま公式ヘルプでさえオンラインとかいう時代だからなぁ

まあVBAの文法ていどなら暗記できるけど
エクセルのオブジェクト全部なんて暗記できる奴がいるとは思えん
2022/03/25(金) 18:39:02.37ID:ogVYp57ed
オペレータがプログラマに聞くって何を?w
知ってる言葉ならべてるだけなのかな
2022/03/25(金) 19:43:12.04ID:RqRNte220
要求通りの動作をするコードが書ければできるやつだろ
検索しようが、他人に聞こうが何も見ないで作ろうが関係ないよ
2022/03/25(金) 20:11:44.87ID:XWaROYx+0
>>534
それだとエラーチェックとかどうでも良くなってしまう
使い捨てのスクリプトならともかく、その言い方はさすがに意識が低すぎる
2022/03/25(金) 20:12:25.07ID:/GQ4L54F0
納期を守ってちゃんと動く
結果がすべて
検索だろうがコピペだろうが関係ない
2022/03/25(金) 20:40:46.85ID:jqc8A7wc0
さっき会社の上司とたまたまそういう話したけど、やっぱ何も見ないでスラスラとコード書けるヤツいたら貴重だから重宝するって言っていた。
ただ、そういう人ほど初歩的なミスに気がつかないとも。
2022/03/25(金) 20:44:28.64ID:ogVYp57ed
>ただ、そういう人ほど初歩的なミスに気がつかないとも。
こんな話はないわ
たまたまそういう人としか仕事してないだけ
2022/03/25(金) 20:57:16.02ID:uzupo3Jn0
飯島 彩矢
いいじま よした
2022/03/25(金) 21:03:49.94ID:2zbf95kya
>>535
???
要求通りなんだから要求にエラーチェックが入ってたら当然実装するだろ
541デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 21:21:49.50ID:UnnJynAs0
エクセルのクエリで、一つのファイルにある複数のシートから、たとえば1つ目から4つ目のデータ(1000行くらい)を1枚目を1から4、2枚目を5から8に転記していくにはどのような設定でやればいいでしょうか
2022/03/25(金) 21:22:42.56ID:8eXyKRPB0
どうしよう、>>541の言っている意味が分からない…
2022/03/25(金) 21:26:08.92ID:4vyR1Miw0
おらも分からん
2022/03/25(金) 21:26:33.02ID:378bs0UD0
>>537
まぁちっこいツールとかならそうかもね
ある程度大きくなったら後々のメンテナンスのし易さとか、テストの工数をどうやれば減らせるかとか
最初の内に構成練り込んで考えて作るから、いくらスラスラ組めてもその辺がすっぽ抜けてると
後々手を加えるごとに分岐だらけのスパゲッティコードになって行くことが多いんだよね
545デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 21:28:20.55ID:UnnJynAs0
>>542
えーっとですね
例えばシート1の1から4つめにA,B,C,Dってデータがあるとします
シートの1から10まであって、
それを一つのシートの1箇所に横に並べたいんです
2022/03/25(金) 21:32:43.40ID:378bs0UD0
>>541
スピード重視でなければこの間からここで色々言われてたADO接続使ってSQLでレコードセットに値取得してそのままシートに貼り付ければいいんじゃない?

ヘッダがいるなら最初から書いとくか、レコードセットから取得するなら別ロジックが必要だけど
547デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 21:34:59.71ID:UnnJynAs0
>>546
単発での処理なのであまりそういう複雑なのは難しいです
2022/03/25(金) 21:38:14.89ID:q+5lBwTqM
>>547
こんなこともわからないような馬鹿は手を出すな
549デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 21:39:37.46ID:UnnJynAs0
クエリとかの簡単な操作でデータ整理できないですかね?
2022/03/25(金) 21:45:45.83ID:378bs0UD0
>>549
何だろう、クエリってSQLも立派なクエリだよ?
そっちの言ってるクエリの定義が分からない。
アクセスとかにあるあのツールっぽいのを言ってるのかな?
2022/03/25(金) 21:46:14.94ID:8eXyKRPB0
普通にマクロの記録使ってシート1の範囲をコピーして
シート2の開始地点で貼り付けたらいいだけじゃないの…
552デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 21:47:30.56ID:UnnJynAs0
そうすると横にデータを並べていきたいので重複していきます
シート全体の数もそのときどきで変わるので
2022/03/25(金) 21:50:02.56ID:378bs0UD0
???
どんどん何をしたいのか分からなくなってくるね
554デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 21:51:28.75ID:UnnJynAs0
>>553
簡単に言うと、複数シートにまたがる複数列の1から4列のデータを、
1枚のシートの横に縦の行を順番に並べていきたいのです
2022/03/25(金) 21:56:14.91ID:w2X6jrV+0
ズコーッ !
2022/03/25(金) 21:56:37.17ID:378bs0UD0
>>554
本当に単純にそれだけなら
2シート目の1〜4列目をコピーして
1シート目に貼り付けたあとに、
貼り付け先の列先を+4して
シート3以降、シートがある分だけそれを
繰り返せばいいんじゃないの?
2022/03/25(金) 21:57:03.52ID:qxuRWoIYM
ID:UnnJynAs0と一緒に仕事しなきゃいけない同僚には同情する
558デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 21:58:28.35ID:UnnJynAs0
>>556
そうなると場合によっては数百のシートを手作業でコピーしなければならないので現実出来ではありません
2022/03/25(金) 22:03:32.99ID:378bs0UD0
>>558
は?
手作業ってどこから出てきたの?
そういうコードを組めばいいという話をしてるつもりだったんbだけど伝わらなかったかな?
2022/03/25(金) 22:03:48.41ID:8eXyKRPB0
手作業でコピーしなければならない んじゃなくて
ループでそれぞれのワークシートを参照 したらいいじゃん
>>556 は 「手作業で」 なんて一言も書いてないよ
561デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 22:05:38.52ID:UnnJynAs0
>>560
どうすればそれができますか?
562デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 22:06:11.03ID:UnnJynAs0
エクセルの方のクエリでは縦に連結されて出てきたのでやり方を教えて下さい
2022/03/25(金) 22:08:44.67ID:378bs0UD0
>>562
いや、そもそもそれだけの処理ならクエリなんて必要ないでしょ
2022/03/25(金) 22:12:12.99ID:8eXyKRPB0
>>561
Worksheets.Count でシートの数を持ってこれるから
Worksheets(n)  ※nは1始まり  でそれぞれのワークシートを参照できるから
後はループの中で >>556 の言う通り行番号を加算しながら貼り付けするなり参照貼るなりすればできるよ
俺はもうここまで伝えるので限界
565デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 22:15:02.86ID:UnnJynAs0
>>563
すみません、パワークエリのことです
プログラム組んだりとかはできません
566デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 22:15:06.77ID:UnnJynAs0
>>563
すみません、パワークエリのことです
プログラム組んだりとかはできません
2022/03/25(金) 22:23:46.18ID:4vyR1Miw0
>>554
もしかしてPower Queryで言うところのマージをしたいの?
複数シートに共通する、keyとなる列が1つあれば出来るけど。
568デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 22:39:41.75ID:UnnJynAs0
>>567
複数シートの配列は同じで、データの内容だけがちがいます
2022/03/25(金) 22:44:11.29ID:3hBoOPeGa
>>565
来る板間違えてる

> ローカルルール
> この板はプログラムを作る人のための板です。

こっちへ行け
【Excel】Power Queryを語るスレ【Power BI】
https://mevius.5ch.net/test/read.cgi/bsoft/1571540368/
2022/03/25(金) 22:44:52.03ID:4vyR1Miw0
>>568
縦軸となる共通するkey列はなに?
何の順番で行が並んでるの?
571デフォルトの名無しさん (ワッチョイ 1110-yL30)
垢版 |
2022/03/25(金) 22:58:31.64ID:UnnJynAs0
>>569
ありがとうございます
572デフォルトの名無しさん (ワッチョイ 134f-kNuw)
垢版 |
2022/03/25(金) 22:58:38.87ID:378bs0UD0
なんだ、Power Queryか。
いい機会だからVBAも勉強してってくれ
573デフォルトの名無しさん (ワッチョイ 134f-kNuw)
垢版 |
2022/03/25(金) 22:59:53.49ID:378bs0UD0
Sub hoge()
Dim targetSheet As Worksheet
Dim bottomRow As Long
Dim toPasteColumn As Long
Dim isFirstTime As Boolean

isFirstTime = True
toPasteColumn = 1

With ThisWorkbook
If .Sheets.Count = 1 Then
Exit Sub
End If

For Each targetSheet In .Worksheets
If Not isFirstTime Then
targetSheet.Activate
bottomRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row
targetSheet.Range(targetSheet.Cells(1, 1), targetSheet.Cells(bottomRow, 4)).Copy _
Destination:=Sheets(1).Cells(1, toPasteColumn)
toPasteColumn = toPasteColumn + 4
End If
isFirstTime = False
Next

End With
End Sub
574デフォルトの名無しさん (ワッチョイ 134f-kNuw)
垢版 |
2022/03/25(金) 23:02:44.53ID:378bs0UD0
うん、やっぱりインデントつぶれたね。
これで動くはずなので良ければVBEに張り付けて実施してみて。
最初のA列がキーであることが前提だけども。
2022/03/26(土) 00:22:22.08ID:wN9O5mc/0
あれ?確かインデント用のツールを紹介してくれている親切な人いたような?
あれ具合良さそう。
2022/03/26(土) 00:30:29.64ID:3d/IeTqK0
Sub aaa()
  For bbb = 0 To 0
    If ccc = 0 Then
      ddd = eee
    End If
  Next
End Sub
2022/03/26(土) 01:25:30.54ID:x5oh4kDTa
ツールの利用者から、ツールの改修担当者に問合せがいったんでしょ。

改修担当といっても、前任者から引き継いだだけだから、全ての仕様はわかっていない。
現在の業務にそぐわない仕様があって、エラーが出たから、
利用者が改修担当者に問合せ。

前任者なら「もともとこういう仕様です」と答えれば、
「ああ、それなら業務が変わったから改修が必要だな」と
改修依頼を出せる。

ツールの利用者も着任して間もない人の場合、
業務が変わったのかどうかもわからない。

そういう場合、ソースコードの条件文を日本語にして
回答するのではなくて、
昔から存続しているチームの誰かに聞くのが普通。
それをしないのは職務怠慢。

自分一人で売上を引っ張ってこれていると勘違いしているのかな。
2022/03/26(土) 06:35:02.37ID:4/mAEYCl0
>昔から存続しているチームの誰かに聞くのが普通。
>それをしないのは職務怠慢。
つまりそれをしないで改修担当者に聞いてるやつが悪いってことだな
2022/03/26(土) 10:14:46.58ID:p8/YoqyTd
ここって長文で講釈を垂れる人おおいよね
しかもVBAにはまったく無関係という
2022/03/26(土) 12:35:46.08ID:OVfO91qG0
自力でできないのに調べない、人に聞かない、期待されているのものがつくれないのは できない人 としか言いようがない
2022/03/26(土) 15:44:49.86ID:wN9O5mc/0
時には長文になるのは仕方ないよ。
丁寧に説明するばそうならね?

上の方で個人名みたいの書いてるアレな人いるけど今の5ちゃんて個人名書いただけでNGじゃなかったか?
2022/03/26(土) 16:02:36.43ID:1KsbV4Zma
個人名NGの規制ってあるのか?
WindowsやLinux板とかでは機能していないように見えるけど
2022/03/26(土) 17:07:43.61ID:kCwfN6Gy0
個人名というか個人情報な
通報されたら警察来るかな
2022/03/26(土) 17:58:02.51ID:wN9O5mc/0
昔バイトしていた居酒屋のマスターが5ちゃんに実名晒されて誹謗中傷書かれていたのを思い出してさ。
2022/03/26(土) 18:09:02.02ID:Gn2xNTk6p
>>577
> 昔から存続しているチーム
そんなのは跡形もないから
2022/03/26(土) 20:17:20.58ID:wN9O5mc/0
職務怠慢は言い過ぎでは?
何かしらの事情あるだろうし。
2022/03/26(土) 23:22:10.99ID:lmdSWMnfa
dim ki as string
ki = "まあいろんな事情があるよね"
ki = ki & "チームメイトに嫌われていて聞きづらいとか"

dim shou as string
shou = ki
shou = shou & "「こんなことくらいしかわからなくて、すみません」と謝られても"
shou = shou & "お前がそんなことしかわからないことは、百も承知。"
shou = shou & "誰かに回してくれることも見込んでの質問なんだけど、"
shou = shou & "ってね。"

dim ten as string
ten = shou
ten = ten & "プログラマーは基本、自分ひとりで仕事完結して、周りに電話したりメールしたりチャットしたり、"
ten = ten & "という連携は面倒くさがる人が多いからね。"
ten = ten & "コーディングされていないことは、できませんが何か? みたいな"
ten = ten & "職務はここまで。これ以上はできませんが何か?みたいな"

dim ketu as string
ketu = ten & "ロボットみたいな人が多い。"
2022/03/26(土) 23:52:13.63ID:4I5liEUu0
何?
この気持ち悪いスレ・・・・・・
2022/03/26(土) 23:57:27.46ID:zJILPsYJM
>>587
汚いコードだな、そんな代入の仕方じゃ変数を4つ用意した意味がまったくないじゃん
そういう時は最後に足すんだよ
Dim DeathStory As String
DeathStory = ki & shou & ten & ketu
2022/03/26(土) 23:58:14.85ID:zJILPsYJM
>>588
そっ閉じすりゃいいのに、そんなスレに何か書き込んでる時点で同類
2022/03/27(日) 03:21:42.29ID:hNNvtCzu0
深夜になると定期的に変な書き込みあるよね
2022/03/27(日) 03:29:36.79ID:/OZccBd9M
>>591
自己紹介かよ!
2022/03/27(日) 07:40:40.82ID:BqsGdBXW0
>>587
無駄に
変数 = 変数 & 文字列 をやると
その分余計にメモリを使用する。やり直し。
2022/03/27(日) 09:48:21.10ID:8deA3KtJa
そもそも >>587 だと
"まあいろんな事情があるよねチームメイトに嫌われていて聞きづらいとか「こんなことくらいしかわからなくて、すみません」と謝られてもお前がそんなことしかわからないことは、百も承知。誰かに回してくれることも見込んでの質問なんだけど、ってね。プログラマーは基本、自分ひとりで仕事完結して、周りに電話したりメールしたりチャットしたり、という連携は面倒くさがる人が多いからね。コーディングされていないことは、できませんが何か? みたいな職務はここまで。これ以上はできませんが何か?みたいなロボットみたいな人が多い。"
ってなるし、適宜 vbCrLf 挟めや
2022/03/27(日) 10:09:59.57ID:GXS4gvi+M
>>594
読んでないけど読む価値のないレスであることだけは判る
2022/03/27(日) 10:21:55.52ID:dieR0oCra
↑ どこを読めばいいのかもわからんアホw
2022/03/27(日) 10:33:27.62ID:jqHr+5yx0
最初と最後の行しか読んでないけど
スペースも改行もつかないって突っ込みだって事だけは判る
2022/03/27(日) 10:56:36.33ID:hNNvtCzu0
ようは字下げしないと読みにくいって教えてくれたんですね親切な人。
2022/03/27(日) 11:49:34.86ID:17nxG3290
>>593
そうなのか
賢くなった
でもいつものクセでSQL文はこの式で書いているわ
2022/03/27(日) 12:17:45.42ID:CPBl4WFea
>>597
それで十分、てか最後の行読んだらわかるだろ
2022/03/27(日) 12:19:46.20ID:CPBl4WFea
>>599
まあ高々数十行位なら気にすることはないよ
602デフォルトの名無しさん (ワッチョイ adcc-tbOq)
垢版 |
2022/03/27(日) 12:41:21.31ID:cPay0R1J0
誰かSalseforceのAPIをVBAでたたく方法わかる人いませんか?
API関連に関して全く無知で、何をどうしていいのか、、、
詳しい人教えてほしいです、、
2022/03/27(日) 12:52:04.46ID:dAzXJbreM
字下げや改行なんてVBAでやることじゃない
印刷だろうが電子化だろうが、文書の整形は出力アプリ側に投げるもんだ
リーダー端末の画面サイズやフォントサイズなんて予測できんだろ?
2022/03/27(日) 13:07:11.24ID:OVREMJced
文書の整形と文書自体を一緒にしてしまうところが悲しい・・・
2022/03/27(日) 17:11:35.24ID:hNNvtCzu0
なんでよ?VBAの義務教育編で字下げは真っ先に学習するはずじゃ??
2022/03/27(日) 17:22:28.69ID:2Abk94v90
年収1000万のインド人はインデントもコメントもなし
一般人はちゃんとつけよう
2022/03/27(日) 17:30:10.15ID:6akgwO9ga
>>602
アクセスするライブラリとAPIリファレンスを掲示してくれたら捗るんじゃね?
2022/03/27(日) 17:33:41.29ID:OVREMJced
>>607
APIは変に教えるとよくないと思うから
それを使って何かするような事をしたいなら正式な仕事なりで発注させるべきだと思うぞ
そもそも何もわかってない奴がここで質問してるのもおかしな話だろ
2022/03/27(日) 17:34:17.13ID:OVREMJced
スクレイピングもたまに質問するやつがいるけど
それも同じな
2022/03/27(日) 17:50:20.50ID:ob1ESvJwH
>>609
VBA でのスクレイピングはイマイチですねえ、動いたり動かなかったりするし、なにかいい方法はないものか?

Function ScrapingAlgoA003(objIE As InternetExplorer, url, keyword As String)
objIE.navigate url
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Dim ReturnValue As Double
Dim div As HTMLDivElement
For Each div In htmlDoc.getElementsByClassName(keyword)
ReturnValue = CDbl(div.innerText)
ScrapingAlgoA003 = ReturnValue
Next div
Set htmlDoc = Nothing
End Function
2022/03/27(日) 19:02:58.02ID:jqHr+5yx0
>>600
そうだな
>>597>>595へのレスだ
2022/03/27(日) 19:18:00.28ID:7EXZAGuD0
>>610
VBAのスクレイピングは今だとSelenium使ったChromeのスクレイピングが主流なんじゃなかろうか
バージョン合わせるのが面倒だけど安定してるし
2022/03/27(日) 19:39:07.33ID:2Abk94v90
Seleniumはほんといいね
IEからxpathで・・・ってやってたのがほんとアホらしくなった
2022/03/27(日) 19:43:23.36ID:U13zJWe20
Seleniumは昔インストールしたんだがよくわからず
未だにIEばかり使ってるんだが もうそろそろ切り替えた方がいいのかな
2022/03/27(日) 19:51:02.70ID:7EXZAGuD0
昔のSeleniumはChromeの方にも拡張機能入れて…とかだった気がするけど今は事前準備も書くのも凄く簡単になってるね
2022/03/27(日) 19:59:57.15ID:2Abk94v90
>>614
100%切り替えた方が良い
ちょっと癖があるけど、cssセレクタ覚えればアホみたいに楽になるぞ
ちなみにXPathはしんどい
617デフォルトの名無しさん (ワッチョイ 12b1-VQaK)
垢版 |
2022/03/27(日) 20:17:18.33ID:Df2KiTxu0
質問です。
連想配列に格納した連想配列の値を取り出すには
どうしたらよいのでしょうか?

Dim dicA as Dictionary
Dim dicB as Dictionary

dicB.Add "a",100
dicB.Add "b",100
dicB.Add "c",100

dicA.Add "A",dicB

としたとき、dicAの中のdicB("b")の値を取得したいとき
どうしたらいいのでしょうか。

Debug.print dicA("A").("b")
とかで出せるかと思ったのですが駄目でした。
2022/03/27(日) 20:19:01.83ID:uW5IEa4H0
set TikuB = dickA("A")
Tikubi("b") = bibibibibi-----
2022/03/27(日) 20:22:07.59ID:EN8vWua40
>>610
For EachなのにIfで条件指定しないのか
2022/03/27(日) 20:29:11.49ID:hNNvtCzu0
乳首エロい
2022/03/27(日) 20:31:09.02ID:BqsGdBXW0
>>617
よく分からんのだけど、Dictionalyって
型宣言しただけで使えるの?

普通に考えると、
Set dic A = New Dictionaly
Set dic B = New Dictionaly
とか、必要そうに見えるけど。
2022/03/27(日) 20:33:33.24ID:BqsGdBXW0
おっと、Dictionalyのスペルが違ってるか
Dictionaryかすまんこ
623デフォルトの名無しさん (ワッチョイ 12b1-VQaK)
垢版 |
2022/03/27(日) 20:45:16.14ID:Df2KiTxu0
元の文と違いますが解決しました。
ありがとうございました。

Sub foo()

Dim dicA As Dictionary: Set dicA = New Dictionary
Dim dicB As Dictionary: Set dicB = New Dictionary

Set dicA("A") = dicB

dicA("A")("a") = "test"

Debug.Print dicA("A")("a") 'test

End Sub
2022/03/28(月) 01:22:22.67ID:LEJNBveMa
("A")
2022/03/28(月) 02:04:12.07ID:dJWBHkZn0
(:; U: ::)
2022/03/28(月) 07:56:32.13ID:bggr0gZp0
Selenium Webdriver と、
Chrome の拡張機能・Selenium IDE の2種類ある
2022/03/28(月) 07:57:45.06ID:W5FkPi4A0
Selenium Webdriver
2022/03/28(月) 12:34:55.90ID:DkLhkvc4M
ウェブダイバー
2022/03/28(月) 13:29:17.84ID:9Kb03WZY0
ウェブダイバーはカラオケで歌うぞ
2022/03/28(月) 18:29:52.50ID:jKre83rL0
>>623
今更だけど
Dim dicA As New Dictuonary
みたいに普通に1命令で設定しなかったのは何故?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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