Excel VBA 質問スレ Part68

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ dbda-8BP0)
垢版 |
2020/08/30(日) 11:55:27.33ID:Oy/VxFsh0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

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

※前スレ
Excel VBA 質問スレ Part67
https://mevius.5ch.net/test/read.cgi/tech/1593104489/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/08/31(月) 21:02:20.59ID:Lt7FggAF0
>>16
ありがとうございます
2020/09/01(火) 16:02:43.57ID:IEy7mEwuM
vba実行時
実行時エラー2147467259(80004005)エラーを特定できません
が出ます。
半月前は出ませんでした。
どうすれば良いでしょうか。

具体的に申しますと
pdfをテキストにコンバートする関数に
入った直後に出ます。
Dim objAcroApp As New Acrobat.AcroApp
Dim id As Long
id=objAcroApp.Show←ここで出ます

事情がありスマホで手打ちしました。
見苦しくすみませんがよろしくお願い申し上げます
2020/09/01(火) 19:54:21.29ID:GHp5MfoEM
小計シートのA列に日付があります
1.メニューシートでリストボックスを設置して、そこに小計シートのダブりを省いた日付を入れて選択できるようにしたいです
2.メニューシートの実行ボタンを押すと選択した日付の行全てを結果シートに出力したいです

どのような関数を使えば1、2を実現できるのでしょうか?
20デフォルトの名無しさん (ワッチョイ 4d10-t21d)
垢版 |
2020/09/01(火) 20:49:46.16ID:4J5+lU0z0
神経衰弱を作っています
Image1~52を並べて全てのImageにクリックされた時の処理を記述しているのですがImageがクリックされた時の処理をひとつにまとめる方法はないでしょうか?
2020/09/01(火) 21:43:46.76ID:rkSCdRtt0
>>20
1つにまとめて、どこをクリックされたかは座標で特定するとか。
2020/09/01(火) 21:46:04.84ID:rkSCdRtt0
>>18
vbsでも同じエラー出る?
23デフォルトの名無しさん (ドコグロ MMca-yRqa)
垢版 |
2020/09/01(火) 21:59:11.19ID:o1zup8QpM
>>20
Imagename = Application.Caller
i = Mid(Imagename, 6)

あとは、Select Caseで割り振る
2020/09/01(火) 22:12:33.10ID:0zlN/jAw0
>>20
マクロ登録に引数を付けるかApplication.Callerを使う
25デフォルトの名無しさん (ワッチョイ 4d10-t21d)
垢版 |
2020/09/01(火) 22:24:18.51ID:4J5+lU0z0
Application.callerよさそうですね
使ってみます
ありがとうございました
2020/09/02(水) 02:29:09.58ID:wtN1DZWS0
>>19
一気に答えがで関数があると思うな
2020/09/02(水) 02:29:31.03ID:wtN1DZWS0
2020/09/02(水) 04:35:56.53ID:A3FRNSa90
>>20
一度、VBA コントロール配列 あたりでググってみると良いかもしれない
2020/09/02(水) 06:20:17.47ID:PYA1799od
>>20
クラス作ってWithEventsおすすめ。
30デフォルトの名無しさん (ワッチョイ e710-t/Jd)
垢版 |
2020/09/02(水) 20:49:21.06ID:hWT8nCmb0
神経衰弱を作っています
カードを2枚裏返して2枚の数字が同じだった
Image1.visible = falseで2枚を非表示にしています
ゲーム途中でコマンドボタンを押すと1から13までのランダムな数字の枚数だけ裏面のカードを表にしたいのですが今のコードだと既に非表示になっているカードまで表にする対象になってしまっていて13という数字を引いても5枚しかめくれないみたいな状態になってしまいます
どうすれば既に非表示になっているカードは除いて表面にする処理ができるようになるでしょうか?
ゲーム開始直後の状態であればちゃんと引いた数字分表面にすることができています
2020/09/02(水) 20:58:13.32ID:RVYxtb8Vd
非表示の時は表示しなければいいのでは…
2020/09/02(水) 21:06:16.30ID:wVSDLDLi0
For i = Lbound(arr) to ubound(arr)

next i
配列の中 ファイル名*書込文字。
(0)001*abc (1)001*bca (2)001*dca (3)002*fed の様な配列の処理を

(0)で001.xlsを開いて文字書き込み
(1)開いてあるから文字書き込み
(2)同様
(3)001閉じる002開く文字書き込み

こんな感じに開いてたら閉じる。違うファイルなら閉じて新たに開くってどうしたら
いいですか?
2020/09/02(水) 21:08:43.99ID:0x5o6h4cd
>>32
その処理のどの部分で躓いてんの?
34デフォルトの名無しさん (ドコグロ MM1f-th+2)
垢版 |
2020/09/02(水) 21:43:27.34ID:M5ACMng3M
>>30
If Worksheets(シート名).Shapes("Image" & カード番号).Visible = False Then
2020/09/02(水) 22:11:52.19ID:0x5o6h4cd
>>34
それだと非表示にしたカートまで表示される
2020/09/02(水) 22:44:34.28ID:7eaUdZ9ha
>>30
表裏の切り替えできてるなら裏かつvisibleだけ処理すりゃいいと思う
37デフォルトの名無しさん (ドコグロ MM1f-aCGe)
垢版 |
2020/09/02(水) 23:26:58.04ID:CEKOaVwIM
>>35
じゃあ、trueに変えればいいじゃん
38デフォルトの名無しさん (ワッチョイ 7f63-3NJ+)
垢版 |
2020/09/02(水) 23:43:34.57ID:4SR2iB8C0
>>22
sはこれでエラーが出ませんでしたが
これでテストになっているのか疑問です。。(acrobatを操作しているように見えない
Sub ConvertFile()
Dim objAcroApp
Dim objAcroAVDoc
Dim objAcroPDDoc
Dim id
Dim js
Dim SaveName
id = objAcroApp.Show
id = objAcroAVDoc.Open("PDFへのパス", "")

ちなみに>>18のソースを本日数度起動してみたところ
1回だけ動作成功しましたww
プログラム以外のところに原因があるんでしょうか。
2020/09/02(水) 23:44:24.75ID:4SR2iB8C0
sはこれでエラーが出ませんでしたが

vbsは・・・
です。失礼しました。
2020/09/02(水) 23:59:58.13ID:86SCKcxdd
>>37
カードの非表示状態を管理するなりしないと単純にvisibleだけ見ても意味ないよ
2020/09/03(木) 07:25:12.95ID:VXBXo8cBd
>>33
次のファイルが同一ならそのままで、違うファイルなら閉じて開くの処理の仕方が分かりません。
42デフォルトの名無しさん (ラクッペペ MM8f-dQ4P)
垢版 |
2020/09/03(木) 09:49:18.05ID:8vHUVo2kM
>>40
visibleプロパティで管理してるんだから問題ないだろ

13回選んで4回裏が出たら17回選べばいいんだよ
2020/09/03(木) 10:06:52.17ID:wpeUBEOu0
>>41
ファイル名保持して、ファイル名が同一ならそのまま、違ったら閉じて開くだけ?isbookopen使うとか?
2020/09/03(木) 20:23:29.13ID:xDfSE2i10
>>38
CreateObject("AcroExch.App")
CreateObject("AcroExch.PDDoc")
しなきゃダメなんじゃ・・。
そういう問題ではない?
2020/09/03(木) 20:28:15.84ID:xDfSE2i10
あと、1回だけ成功したのなら、
馬鹿馬鹿しいと思うかも知れないけど、
DoeventsかSleepを入れてみるとか。
2020/09/04(金) 12:46:00.80ID:lx1E7kKYM
csvをある列でフィルタし
結果を別のブックに貼り付け
csvとして保存したところ
日付+時刻(ゼロ時)の列すべて
5桁の数字になります
どうしたら日付+時刻のままで
いてくれますか
2020/09/04(金) 14:35:51.29ID:cB2Mz28T0
文字列として貼る
48デフォルトの名無しさん (ワッチョイ 7f8e-+abr)
垢版 |
2020/09/04(金) 16:31:17.78ID:9qR3rveJ0
>>46
VBAの話しか?
49デフォルトの名無しさん (ラクッペペ MM8f-qH39)
垢版 |
2020/09/04(金) 17:16:17.55ID:lx1E7kKYM
>>48
はぃ、vbaでそういう処理を書きました
2020/09/04(金) 19:53:46.53ID:F8mRPL3VM
一定間隔でマクロ実行する方法はなんとなくわかるのですが、不規則な間隔(5秒〜90秒)でマクロ実行したいのですが
どんなやり方がありますか?
2020/09/04(金) 20:18:00.24ID:1AlCas5O0
>>46
日付が5桁の数字って、44078とかだろうけど、
多分フィルタもCSVも関係ない。
値貼り付けしちゃってる。
2020/09/04(金) 20:24:24.36ID:1AlCas5O0
>>50
Rnd使うのが一般的なんだろうけど、アホな方法を挙げると、
誰かが作った不規則をパク
2020/09/04(金) 20:26:21.57ID:1AlCas5O0
ってくるとか。
例えばライブカメラの画像をDLして使うとか。
2020/09/04(金) 22:27:33.32ID:awq2GZ8I0
>>50
マクロの最後にApplication.OnTimeを書く
現在時刻に乱数で秒数を足す
55デフォルトの名無しさん (ワッチョイ e710-t/Jd)
垢版 |
2020/09/04(金) 23:53:41.25ID:3ZUt+s6n0
モジュール1で定義した配列をモジュール2で使うにはどうすればいいですか?
モジュール1でdimではなくpublicで宣言すればいいのでしょうか?
2020/09/04(金) 23:56:30.81ID:LK01+huQd
なんでそれをやってみないの
2020/09/05(土) 00:15:03.09ID:oZJVOAAi0
>>51
すべてご推察のとおりです。ありがとうございます。
xlPasteValuesで張り付けてます。
xlPasteAllだと年が月日の後になってしまいます(5/31/2020 0:00)

>>47さんのおっしゃる
「文字列として」貼り付ける設定を発見できません。
""で囲めば文字列として貼り付けられるのでしょうか。
58デフォルトの名無しさん (ワッチョイ 7f8e-+abr)
垢版 |
2020/09/05(土) 00:15:37.71ID:wG6iKMy+0
最近また馬鹿が出てきた
2020/09/05(土) 00:20:53.60ID:dEfSwWqXd
>>57
セルの書式設定
2020/09/05(土) 07:07:58.26ID:8ZVzqJQh0
CSVで保存したら書式通りで保存されたっけ?
2020/09/05(土) 08:05:59.89ID:aR6FsABo0
>>60
される
2020/09/05(土) 10:12:38.88ID:LyoNVqbOr
A1に3、B1に100といれ、実行すると、

3から100行までを非表示にするマクロお願いします
2020/09/05(土) 13:47:16.04ID:CLMpHe/Q0
基本技術の試験勉強してるのですが、

https://www.fe-siken.com/kakomon/30_aki/pm13.html

この過去問の設問3のマクロの文章の和訳というか、各行がどんな処理をしているのか日本語で説明できる方いませんか

あと、変数iなんですが、なぜiなんでしょう

よろしくお願いいたします
2020/09/05(土) 14:03:42.79ID:4XqPsYsKd
ループカウンタ用の変数名はとりあえずiにでもしとこうっていう昔からの名残
細かく言うと整数を表すIntegerのi
i、j、k〜nまで順によく使われる
2020/09/05(土) 14:08:56.71ID:CLMpHe/Q0
>>64
ありがとうございます
特にこだわる深い意味は無いのですね
助かります
2020/09/05(土) 14:19:36.48ID:CLMpHe/Q0
何度もレスしてすいません。
問題の文章とVBAのマクロの文章を照らし合わせて回答をみると何となく答えがわかる気がしてきたのですが、

相対(a2,work_line,3)

がなぜ来店状況ワークシートのセルd列のことになるのか分かりません。
3列目なのでcだと思ったのですが…
2020/09/05(土) 14:51:37.42ID:OBeOSrHnp
>>64
indexかと思っていたんだが
2020/09/05(土) 15:12:53.61ID:JRHWh/h7d
>>66
列番号ではなくA列から相対的に数えて何個右の列かってことだろう
2020/09/05(土) 15:15:25.53ID:jnQOfSyba
>>66
問題見てもないけど、相対って書いてあるからB列から始めてるんじゃ?
と思ったけどレス見ると3次元配列っぽいしよくわからん
2020/09/05(土) 15:16:40.51ID:YqeHmb95d
相対(A2,work_line)も同じ考え方だぞ?
2020/09/05(土) 15:19:54.14ID:Xd3OIwcX0
>>63
fortran起源説
2020/09/05(土) 15:20:15.06ID:YqeHmb95d
vbaに直すとrange("A2").offset(work_line,3)
2020/09/05(土) 16:21:30.22ID:zirZG8//r
>>68
>>72
ありがとうございます!!
理解しました!
2020/09/05(土) 16:23:09.92ID:ZUfl2WLX0
>>70
すいません
そもそもそれもよく分かってなかったのです。
ちなみに良かったらどういう意味が教えて欲しいです。
聞いてばかりで申し訳ありません。
2020/09/05(土) 16:25:38.15ID:STsU3nz1r
>>64
インデックスじゃないの?
2020/09/05(土) 16:34:57.30ID:BMRcPhN/d
>>74
列がわかったなら行もわかるはずだが…
77デフォルトの名無しさん (ワッチョイ 7f8e-+abr)
垢版 |
2020/09/05(土) 17:24:34.57ID:wG6iKMy+0
>>74
そろそろ消えろ
78デフォルトの名無しさん (ドコグロ MM1f-aCGe)
垢版 |
2020/09/05(土) 17:30:09.65ID:k1PkCOGDM
>>74
相対(a2,行,列)
0の場合は省略可なので
相対(a2,行)とか相対(a2,,列)でもいい
2020/09/05(土) 17:54:39.12ID:HmyJ6FBVd
>>78
それはvbaのoffsetの構文であって設問の問題文とは関係ないな
2020/09/05(土) 18:10:48.71ID:BBnzOe5t0
>>62
の質問内容がひどすぎて
誰もくいつかないなw
2020/09/05(土) 18:23:56.02ID:eBP4WmWUa
お金が発生するわけでもないし
2020/09/05(土) 18:58:31.52ID:ZUfl2WLX0
>>78
ありがとうございます。
とても助かりました。
2020/09/05(土) 20:42:59.70ID:XhaSpdgL0
>>62
Range(Rows(Range("A1").Value), Rows(Range("B1").Value)).Rows.Hidden = True
2020/09/06(日) 09:47:35.66ID:cKQMszzk0
>>57
値で貼り付けるなら、後から
.NumberFormatLocal = "yyyy/m/d h:mm;@"
2020/09/06(日) 09:49:52.25ID:cKQMszzk0
>>63
答えは簡単だが、質問が難しすぎる。
2020/09/06(日) 14:01:01.76ID:spMqG8Fw0
>>85
上手く質問できなくて申し訳ありません。

全体的な単語の一つ一つの意味が知りたかったのです。

お手隙ならばで構わないのですが、

https://www.fe-siken.com/kakomon/30_haru/pm02.html

この問題の設問3の重みパラメータというのがどう作用して出力Zの値になるのか教えて頂けないでしょうか。
2020/09/06(日) 14:02:20.47ID:spMqG8Fw0
あ、すみません。問題よく読んでませんでした。
これについてはレス直後理解しました。
ごめんなさい( ;ᯅ; )
2020/09/06(日) 14:27:55.58ID:spMqG8Fw0
https://www.fe-siken.com/kakomon/30_haru/pm03.html

この設問1の答えなんですが、この文でどうして結合とか保護者の氏名と住所を抽出するのですか?
2020/09/06(日) 14:33:06.47ID:PpfBKGYq0
>>84
これで出来ました
ありがとうありがとうありがとううううううううーー
90デフォルトの名無しさん (ワッチョイ 7f8e-+abr)
垢版 |
2020/09/06(日) 18:43:46.86ID:Mql9n0EK0
>>88
死ね
2020/09/07(月) 05:30:38.87ID:OoqPbQfP0
>>90
お前が死ね
ゴミ山猿の屑野郎
2020/09/07(月) 12:55:41.51ID:ZbJzmFKoM
>>91
内容も読まずに書くなよクズ。SQLのことだろうが。
2020/09/07(月) 18:18:17.86ID:R5ozSk7c0
ここで質問したらダメだったみたいですね
該当スレとかあるのでしょうか
2020/09/07(月) 18:26:10.30ID:aZP2Fcscd
>>93
http://egg.5ch.net/test/read.cgi/welfare/1598921138/
2020/09/07(月) 18:43:17.53ID:K46ocmR8a
>>88
これをどこで聞けばいいのかもわからなかったらFE受かるの難しいよ…
2020/09/07(月) 20:07:21.03ID:Yu9E5X6OM
VBA勉強しはじめて、ようやくOutlook連携とかzip圧縮とかやり始めたんだけど
Excelそのものの操作に関する情報と比べて、参考に出来る情報の質も量もガクッと落ちた気がする

やっぱ話題のpythonに切替えたほうが悩まずやれるのだろうか
2020/09/07(月) 20:09:11.40ID:Yu9E5X6OM
質も量も、っていうのはノンプログラマーの自分が探せる範囲って意味です
98デフォルトの名無しさん (ワッチョイ e7e6-dQ4P)
垢版 |
2020/09/07(月) 20:22:49.70ID:sgrgY4Mk0
zip.exe叩けばええやろ
99デフォルトの名無しさん (ワッチョイ 5f6d-4jJb)
垢版 |
2020/09/07(月) 20:51:37.54ID:/DR3/4oV0
目の前に答えが書いてあっても理解できない、答えだと気付けない
これが「馬鹿には無理」の意味
2020/09/07(月) 21:00:18.85ID:Yu9E5X6OM
半年ROMって勉強します押忍押忍押忍
2020/09/07(月) 21:22:51.97ID:JIC+p5t3M
何をしたいかによるけど、Windowsの操作の自動化っていう範疇ならPowerShellおすすめ
Comオブジェクトも使えるよ
102デフォルトの名無しさん (アウアウエー Sa1f-yOpk)
垢版 |
2020/09/07(月) 21:38:02.53ID:J1GBImUha
なにがおかしいの?
Sub func()
Dim url As String: url = "https://e-hentai.org/g/1727798/1fbe77a0a2/";
Dim buffer As String: buffer = ""
Dim objLinks As Object
Dim objIE As InternetExplorer
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False

objIE.navigate (url)
Do While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

Call WaitFor(3) ' wait for 3 seconds

objLinks = objIE.document.getElementsByClassName("gdtm").outerHTML

Cells(1, 1).Value = objLinks

objIE.Quit
Set objIE = Nothing
End Sub

Function WaitFor(ByVal second As Integer)
Dim futureTime As Date: futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Function
2020/09/07(月) 22:46:01.59ID:qahfABoQ0
IEはもう無くなるよ
2020/09/07(月) 22:49:52.43ID:744b2nM10
>>102
Dim objLinks As String
2020/09/07(月) 22:54:20.72ID:VQNIMFGd0
>>103
IEの代替え何使ったらいいの?
2020/09/07(月) 23:07:32.69ID:744b2nM10
>>105
データをダウンロードするだけならブラウザを使わずに直接ネットアクセスした方が早くて簡単
色んな方法があるけどXMLHTTPとかWinHttpRequestとか調べてみ
2020/09/07(月) 23:17:00.84ID:VQNIMFGd0
>>106
ありがとうございます


'JavaScriptを実行しFormを送る処理
objIE.Navigate "JavaScript:doAction('/文字列')"

みたいなことしないとアクセスできないサイトのデータが取得したいのですが
他に方法ありますか?
2020/09/07(月) 23:22:23.18ID:sgrgY4Mk0
JavaScriptを読んで何やってるか調べろ
2020/09/07(月) 23:49:39.86ID:744b2nM10
>>107
Form送信は単純なHTTPアクセスで代替できるケースが多いから、これもブラウザを使う必要はない
てか、WEBの構造はVBA関係ないし
2020/09/07(月) 23:56:10.64ID:UwONkXQv0
エクセル2010です。
上書き保存時にすべてのシートでA1セルを選択するようにしたいのですが、
Ctrl+S時とボタンのクリックイベントで挙動が違うことにハマってます。
1枚目シートにactiveXコントロールのボタンを配置し、VBAの構成は以下です。
1. シートモジュール : ボタンのクリックイベントにThisworkbook.saveだけを書いています。
2. ThisWorkbookモジュール : beforeSaveイベントで3を呼び出し。
3. 標準モジュール : 全シートのA1セルを選択するSubプロシージャ。ForEachでまわすだけ。

Ctrl+Sの際は2→3でうまくいきます。
ボタン押下の場合は、1→2→3と流れてはいるものの、なぜか各シートがactivateされなず、activeSheet.Range("A1").Selectが働きません。
1のクリックイベントから直接3を呼び出すのは、うまく行きます。

何故このような挙動になるのか分からず数日ハマってます。
どなたか、ご教示よろしくお願いします。
111デフォルトの名無しさん (ドコグロ MM7b-aCGe)
垢版 |
2020/09/08(火) 02:03:49.70ID:weDKADyMM
>>110
for i= activeworkbook.worksheets.count to 1 step -1
apprication.goto activeworkbook.worksheets(i).range("a1")
next i
activeworkbook.save

スマホ打ちだから綴りミスはあるかも
2020/09/08(火) 07:47:00.42ID:vMdvrooDa
>>110
For eachで全シート回してるならActivateしなくても、
sh.Range("A1")で行けないか?
2020/09/08(火) 07:48:01.88ID:vMdvrooDa
>>112
間違えたsh.Range("A1").Selectだわ
2020/09/08(火) 10:40:31.23ID:C66iYfBu0
>>110
働かないという場合の原因で以下のことを調べてみ

1.実は働いていたがその後に別の動作をしたため働いていないように見える
2.働こうとしたが、なんらかの異常が出て失敗している
3.その処理が実行されていない(on errorやifの条件、イベント発生していないなど)
2020/09/08(火) 11:03:00.55ID:0vfIbeP00
>>105
漏れは、yahoo のログインとか、
Ruby, Selenium Webdriver で、ブラウザを自動操作してる

単純なダウンロード・スクレイピングなら、RubyのNokogiri。
外部コマンドなら、curl, wget
116デフォルトの名無しさん (ラクッペペ MM8f-dQ4P)
垢版 |
2020/09/08(火) 11:52:57.99ID:POT3YWITM
Application.EnableEvents=Falseしてるとか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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