Excel VBA 質問スレ Part67

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 33da-3+hg)
垢版 |
2020/06/26(金) 02:01:29.56ID:uDfmpksE0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

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

※前スレ
Excel VBA 質問スレ Part66
https://mevius.5ch.net/test/read.cgi/tech/1589085825/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
343デフォルトの名無しさん (ワッチョイ cb8e-edot)
垢版 |
2020/07/08(水) 16:22:19.40ID:0tPjVu1x0
だから最初に馬鹿はお断りしときゃいいんだよ
344301 (ワッチョイ 2301-6wWl)
垢版 |
2020/07/08(水) 17:12:58.80ID:gPwSdoJG0
つか、書き込み先を、D:\にしたら動いたwww
>>327さん、どうもありがとう!!!

こんなシンプルなソースでバイナリが書けるんです。
どんなにググッてもこんなにシンプルなソースは出て来ません。
vba史上の快挙です!

Sub test()
Dim btByte() As Byte
Dim lngFN As Long
ReDim btByte(5) As Byte
btByte(0) = &H4D
btByte(1) = &H54
btByte(2) = &H68
btByte(3) = &H54
btByte(4) = &H68
btByte(5) = &H64
lngFN = FreeFile
Open "D:\hogehoge.bin" For Binary As #lngFN
Put #lngFN, , btByte
Close #lngFN
End Sub
2020/07/08(水) 17:43:43.08ID:4BPfKF9s0
はい次の方
346301 (ワッチョイ 2301-6wWl)
垢版 |
2020/07/08(水) 17:58:35.88ID:gPwSdoJG0
>>341
midiファイルというのはサイズが決まってないんですよ
347デフォルトの名無しさん (ワッチョイ 2de6-0WwX)
垢版 |
2020/07/08(水) 19:59:20.87ID:7XVFoSLh0
>>344
そりゃVBAではなく、VBですらなく
BASICの範疇だからな

基本過ぎてわざわざWEBに上げたりしない
348デフォルトの名無しさん (ワッチョイ a5ae-7/eX)
垢版 |
2020/07/08(水) 20:31:33.87ID:cTUxRwdY0
>>344
死ね
2020/07/08(水) 21:18:00.92ID:J4iDAbFT0
いつも馬鹿な質問ばかりで済みません。
Excelファイルをダブルクリックした際に他の人が先に開いていた場合、[読み取り専用]か、[通知]か聞かれます。
これをダイアログを出さずに最初から読専で開くようにすることは可能でしょうか?
(最初に開いた人は編集・保存できるという前提です)

外部から開く際のコントロールは簡単ですが、自分自身でコントロールするのは無理ですかね?
Workbook_Openでいろいろ試したのですが、どうもこのイベントよりも先にダイアログが発生しているようで、、、
無理だ、という回答でもいいです。ご意見ください。
2020/07/08(水) 21:25:31.07ID:eeGZOJTWa
>>349
https://www.shegolab.jp/entry/windows-excel-read-only
2020/07/08(水) 21:41:34.04ID:eWJ0cHmK0
>>349
まずちゃんと自分で調べよう
知識が伴ってないのにろくに調べもしないでは自分で解決どころか調べ方すら身に付かない

まぁ、はなから自分でやる気なんか無いのかもしれないが
2020/07/08(水) 21:42:45.60ID:J4iDAbFT0
>>350
情報ありがとうございます。
リンク先のものはだいたい既知の情報でした。
やっぱり自ファイルでの処理は難しそうですね。
2020/07/08(水) 21:46:48.09ID:J4iDAbFT0
>>351
いや、ここに書き込むときは相当調べて最後の頼みのつなで書き込んでます。
調べよう、と仰るということは、何かいい方法をご存じですか?
2020/07/08(水) 22:00:15.73ID:wtc6YQgJ0
>>353
ファイルの関連付けを変えて、マクロで迂回して。。。

。。。ここまで来るとウイルス判定かも(詳しい内容は自粛します)
2020/07/08(水) 22:05:22.90ID:J4iDAbFT0
>>354
う〜〜ん、あまり危ない橋は渡らないでおきます。
2020/07/08(水) 22:32:26.07ID:R5JQxD1z0
>>353
調べ方を調べてから言え
2020/07/08(水) 23:26:10.17ID:J4iDAbFT0
>>356
じゃあ、
>>349の繰り返しになりますが、、箇条書きにしますね。
●Excelファイルをダブルクリックした際の挙動についてです。
  ** つまり、外部から開くケースは除外です。(こちらのコントロールに苦はありません。昔から使っています)
    「外部から」とは、具体的には、、以下のケースなど。
    ・ Workbooks.Openの引数で制御する。(VBSからのOpenも含む)
    ・ ContextMenuの"新規作成"で開く。
●他の人が開いていた場合のケースです。
  ** 最初に開いている人は編集・保存ができる前提です。
    → つまり、FileAttributeを最初からReadOnlyにするケースは除外です。
●上記の際の、[読専]|[通知]を聞いてくるDialogをバイパスしたい。
  ** 「最初から読専で開きたいわけではなく、誰かが開いているときは最初から読専にしたい」
    → つまり外部から開くケースにあたらない。
● 自ファイル側で判定したい、、、Workbook_Openで試したが、このイベントより先に
  ダイアログが発生してる。

>>349とほぼ同じ内容ですが、これだけ書けばどこまでの理解で何を試したか読み取れますか?
2020/07/08(水) 23:40:00.14ID:4BPfKF9s0
てかそんなんできたらマルウェアの温床になるから出来ないって思っとけよ
共有化でも足りないんならあきらめろん
2020/07/08(水) 23:44:27.92ID:J4iDAbFT0
>>358
よくわかりませんが、わかりました。
本件Closeで。
2020/07/09(木) 00:12:21.12ID:dz7PM5ALa
>>346
midiはファイルの種類じゃない
2020/07/09(木) 00:12:27.29ID:ylhvfSy00
ファイルが書き込めない状態になってたら読み取り専用で開けばいいだけじゃん
2020/07/09(木) 00:13:47.48ID:dz7PM5ALa
>>357
きもい
2020/07/09(木) 00:17:27.90ID:dz7PM5ALa
社会で他の人も使うファイル勝手にいじるなよ
2020/07/09(木) 00:44:28.03ID:HzjnRl+40
>>363
お前には聞いてないから大丈夫だよ。
じゃ、お休み。
2020/07/09(木) 02:16:40.71ID:eQo6hEQpa
>>364
おまえに言ってない
2020/07/09(木) 03:10:18.53ID:rHxVo6X00
IE制御のついての質問。
マクロでIE制御を使ってウェブ情報を取り込んでいるんですが、連続で作動させると稀に止まることがあります。
バグった時にタスクマネージャーの詳細をみると毎回「ielowutil.exe」のプロセスだけ残ってるんですよね。
タスクマネージャーでielowutil.exe を右クリックして強制終了させると、また上手く作動するんですが、この ielowutil.exe プロセスを強制的に終了させるコードとかないですかね。

ぐぐっても英語とか読めないのでわからない。誰か助けて
https://www.mrexcel.com/board/threads/vba-automation-error-2125463506-8150002e.1079769/
2020/07/09(木) 03:59:15.57ID:uBlORkna0
taskkill /im ielowutil.exe
なんでもかんでもExcelでやろうとするな
368301 (ワッチョイ 2301-6wWl)
垢版 |
2020/07/09(木) 05:30:09.44ID:C69oBRyL0
つか、>>344のソースの

> ReDim btByte(5) As Byte
> btByte(0) = &H4D
> btByte(1) = &H54
> btByte(2) = &H68
> btByte(3) = &H54
> btByte(4) = &H68
> btByte(5) = &H64
この部分で、btByteという変数に6個の16進数を代入していますが、もっとエレガントに代入する方法はないでしょうか?
実は定型文みたいのを50個ぐらい入れなきゃならないのです。
2020/07/09(木) 06:03:23.76ID:hGjJ3XRlM
ないです
次の方どうぞ
2020/07/09(木) 06:34:39.36ID:pd2EiZRKd
>>368
そういうのは、あらかじめ用意したバイナリファイルから読み込んだ方がいいと思うんだけど
どうしてもソースに大量の16進数を直接書きたいなら
配列を使う方法
h = Array(&H4D, &H54, &H68, &H54, &H68, &H64)
For i = 0 To 5
 btByte = h(i)
Next

文字列を使う方法
h = "4D,54,68,54,68,64"
For i = 0 To 5
 btByte(i) = Val("&H" & Mid(h, i * 3 + 1, 2))
Next
371301 (ワッチョイ 2301-6wWl)
垢版 |
2020/07/09(木) 06:37:41.14ID:C69oBRyL0
>>370
ありがとうございます。 感謝します。
2020/07/09(木) 06:38:57.33ID:pd2EiZRKd
文字列を使う方法2
h = "4D,54,68,54,68,64"
For i = 0 To 5
 btByte(i) = Val("&H" & Split(h, ",")(i))
Next
2020/07/09(木) 06:57:38.94ID:150ctWWia
エレガント?
2020/07/09(木) 07:48:49.30ID:3iI6FAhKd
>>368
そのエレガントな方法を考えるのがプログラミングなんじゃないの?
50個をコードでどうにかするなら、それをコードに書かにゃならんからエレガントにはならん。
別の所に持って良いなら別途ファイルを用意しとけば良い。
設定とか50個程度ならどっかのシートに書いとくとかでも良い。
2020/07/09(木) 07:58:21.56ID:8/Q//t/ar
ほんとコードくれくれ君は自分で何も考えないな
あげる方も頭おかしいが
2020/07/09(木) 10:13:45.21ID:tVMvaFoW0
激しく同意する
ちなみにバイナリを作成するやり方で実行ファイルが作れるのでウイルシなんかも作れてしまうわけだが
2020/07/09(木) 10:32:17.05ID:VstlXiSO0
モジュールから単体動作する関数を切り取って、別のモジュールにコピーしたのですが
変数の宣言がないとエラー表示されました。何度見ても宣言は正しくされているので?です。
新しく変数宣言して、置き換えると動作します。
こんなことあるのですか?
2020/07/09(木) 10:47:12.19ID:ylhvfSy00
>>377
変数?定数?
2020/07/09(木) 10:48:52.16ID:VstlXiSO0
すみません。変数ではなく定数(const)でした。
2020/07/09(木) 10:53:22.69ID:ylhvfSy00
>>379
グローバルな定数?
2020/07/09(木) 11:12:09.02ID:VstlXiSO0
ローカルです。
2020/07/09(木) 11:19:56.91ID:JYozEgDc0
option explicitの有無は?
2020/07/09(木) 11:21:50.10ID:DLLEuHaFa
>>376
みんなわざわざ煙に巻いてるのに言っちゃ
2020/07/09(木) 11:26:19.87ID:VstlXiSO0
>>382
option explicitはあります。
2020/07/09(木) 11:30:45.63ID:ylhvfSy00
>>384
稀に起こるが原因は不明
エラーになった定数の宣言行を切り取り貼り付けすればとりあえず治る
2020/07/09(木) 12:02:59.73ID:JYozEgDc0
コピペしたとき?
実行したとき?
2020/07/09(木) 12:29:25.07ID:VstlXiSO0
>>385
問題の行をコメントアウトし、その下に同様の内容を書いたら動作しました!
稀に起きるのですか。初めて遭遇する現象です。

>>386
実行時です。
2020/07/09(木) 14:14:55.78ID:VstlXiSO0
>385>386
他の箇所でも同様のエラー起きましたが書き直せば動作しました。
ありがとうございました。
389デフォルトの名無しさん (ラクッペペ MMcb-0WwX)
垢版 |
2020/07/09(木) 18:37:42.36ID:dhOVscThM
>>376
バイナリだからウイルスって意味不明

マクロウイルスはソースが見えるからウイルスじゃないとでも言うつもりか?
2020/07/09(木) 18:40:33.54ID:WyUmT5e70
>>389
その脳内変換が意味不明
391デフォルトの名無しさん (ラクッペペ MMcb-0WwX)
垢版 |
2020/07/09(木) 18:53:47.54ID:dhOVscThM
バイナリに謎の恐怖心を持っているんだろ?

そもそも2進数じゃなくて16進数だ
2020/07/09(木) 19:27:38.21ID:0UE7wqUeM
まあイチからバイナリ書き出しで実行ファイ作れるような人はこんな質問しないけどな
2020/07/09(木) 19:41:37.34ID:WyUmT5e70
>>391
その脳内変換が意味不明
2020/07/09(木) 19:50:25.19ID:tq6y70T30
元々の変な質問のせいでくだらない流れになった

はい次の方
2020/07/09(木) 20:05:26.54ID:SKtauNRXM
VBAに将来はありますか?
2020/07/09(木) 20:11:04.35ID:F9SMopSBM
>>395
Excelと共に生き続けるだろうね
Excelの将来と同じ
2020/07/09(木) 20:13:33.30ID:K5359iyV0
そういえばExcelにPython載るって話はどうなったの?
2020/07/09(木) 20:29:37.44ID:Qt+epPmk0
VBA
https://docs.microsoft.com/ja-jp/office/vba/api/overview/

VSTO
https://docs.microsoft.com/ja-jp/visualstudio/vsto/office-solutions-development-overview-vsto

Officeアドイン
https://docs.microsoft.com/ja-jp/office/dev/add-ins/overview/office-add-ins
2020/07/09(木) 21:13:12.39ID:54FX1SKx0
Dim objShell As Object  ←値参照
Dim objExec As Object

Sub ie_kill()

Set objShell = CreateObject("WScript.Shell")    ←これなに???なんで必要なの???
Set objExec = objShell.Exec("taskkill.exe /F /IM iexplore.exe")  ←iexplore.exeをタスクキル
2020/07/09(木) 21:27:01.41ID:YMHQKg0aa
>>399
CreateObjectまんまオブジェクトを創造してます
2020/07/09(木) 21:31:09.68ID:36OHf5x10
New使っちゃいなよ
2020/07/09(木) 21:42:49.37ID:ylhvfSy00
>>399
参照設定をしていればいらない
2020/07/10(金) 10:20:58.35ID:O0QgyOqq0
>>397
OfficeやWindowsは開発者が妄想を公式ブログで垂れ流すのが恒例行事
それを公式発表だと世間が勝手に騒いでるだけ
2020/07/10(金) 13:53:04.16ID:3B5Gxm0d0
ExcelってIE制御からedge制御できるようになった?
未だにIEが一番使い勝手いいの?
405デフォルトの名無しさん (ワッチョイ 75f1-+b0N)
垢版 |
2020/07/10(金) 14:38:15.55ID:91NkPSzZ0
ExcelってChrome制御できるようになった?
2020/07/10(金) 15:03:43.58ID:DnP9bxpW0
いまはExcelがブラウザを制御するのではなくてブラウザがExcelを制御する方向性が主流
VBAはあくまでExcel内で完結する作業に限定した言語であって外部との連携作業はOfficeアドイン(実体はJavaScriptなどのスクリプト言語)や
VSTO(VisualStdioで言語はC#が中心)で行なうのがMicrosoftの方針
Pytonはよく分からんけど上手くOfficeAPIを利用すれば出来るかもしれない
概要についてのドキュメントは>>398
2020/07/10(金) 15:20:21.38ID:TbXdOMZ+r
てゆかブラウザ操作するよりAPI叩いたりスクレイピングするほうが主流よね、今は
ずっと昔はExcelで入力してIEに反映させるとかあったけど、今じゃレガシーすぎる
2020/07/10(金) 17:42:22.09ID:OUgIsXw30
ウチはシステムが古くてAPIなんてものに対応してないので現役だわ。
2020/07/10(金) 20:17:34.10ID:R/wZjJlU0
人間も古いからちょうどいい
2020/07/10(金) 21:41:25.81ID:rd+FvU1jd
>>407
API叩くのもスクレイピングも変わらんけどな。
何でやるかの違いくらい。
まあ、Chrome制御は出来んけどな。
WebDriver使えるから出来るとも言えるか。
何処から何処迄がExcelって話。
2020/07/10(金) 21:42:22.54ID:rd+FvU1jd
>>406
VSIOは寧ろ廃れてるような気がするが。
2020/07/10(金) 21:42:47.24ID:rd+FvU1jd
>>411
VSTOな。
2020/07/10(金) 22:02:00.46ID:c4ANmjzxa
>>412
VIOな
414デフォルトの名無しさん (ワッチョイ 75f1-+b0N)
垢版 |
2020/07/10(金) 22:39:50.15ID:91NkPSzZ0
>>413
それはちん毛ちんこケツの穴のことだ
2020/07/11(土) 00:41:33.92ID:vLv3KjHj0
あかん、モーむり
sendkeys使いすぎてるせいで
Numlockキーがオンになったりオフになったり・・・
かと言って必ずオンオフ切り替わるかというとそうでもないし
誰か絶対100%常にNumlockオンになるコード教えてくれえ
416デフォルトの名無しさん (ドコグロ MM93-jxlo)
垢版 |
2020/07/11(土) 01:11:16.23ID:2VuM3xocM
>>415
vbaでレジストリを操作できるから、そこに道があるかも知れない
2020/07/11(土) 02:13:29.34ID:Eg2/WlgT0
>>415
2 つ以上の SendKeys ステートメントが連続して実行されると、NumLock キーがオフになる
2020/07/11(土) 02:29:45.71ID:6j9f8L+G0
>>415
https://santane.jp/wp/?p=355
2020/07/11(土) 09:37:08.18ID:vLv3KjHj0
ありがとうございます
418の方法も試したんですが、なぜか一回目では適用されず
あと418の一番下にある、入力リストを展開するとは一体?
2020/07/11(土) 10:30:37.96ID:R2Hyt8Cad
>>415
Sendkeys使う奴は糞。
絶対に使っちゃいけないと言った方が事故が起こらないくらい事故が起きても不思議じゃない所で使う奴がいる。
421デフォルトの名無しさん (ワッチョイ 75f1-+b0N)
垢版 |
2020/07/11(土) 10:36:45.99ID:QNz3pRQ00
糞!ですか
2020/07/11(土) 10:40:32.24ID:VwbCqtVvM
何年前からのバグなんだろうねこれって
2020/07/11(土) 10:45:18.55ID:R2Hyt8Cad
>>421
Sendkeysは基本的にコントロール出来ない。
他アプリを操作するにはもっとコントロール出来る方法がある。

どうにも出来ない時は仕方がないが、絶対に使わないつもりで、どうにもならない時だけ使うべきだね。
2020/07/11(土) 10:51:22.16ID:R2Hyt8Cad
あと、危険は承知でちょろっと使う時はある。
お手軽だから。

でも、それで使うことを許容すると危険もしらず、ちょろっとで済まない所で使う奴が出てくる。
2020/07/11(土) 11:53:42.98ID:vrrLv2a80
Excelを頼りすぎ
2020/07/11(土) 11:59:27.85ID:8xOOoQBua
Excelで恋愛相談から今晩のおかずまで
2020/07/11(土) 12:25:50.11ID:DdDKJrYh0
sendkeysって手段としてしょうもなさすぎるんだよな
目的を整理すれば他にもっといいやり方があるはず
2020/07/11(土) 12:40:05.09ID:pqxpyZgt0
キーワードによる予測変換機能っぽいのをやろうとしたときに、
いいコード無いか探してたら使ってたなsendkeys
429デフォルトの名無しさん (ワッチョイ 75f1-+b0N)
垢版 |
2020/07/11(土) 13:02:10.38ID:QNz3pRQ00
糞!
2020/07/11(土) 13:57:47.97ID:6j9f8L+G0
確実にコントロールしたいならAPI
https://www.vba-ie.net/code/numlockon.php

まあAPIも万能じゃないんだけど、今回はとりあえず使える
2020/07/11(土) 14:02:53.27ID:R2Hyt8Cad
>>430
いやいや、確かにSendkeysよりは良いけど、何でキーボードシュミレートしたいのよ。
オブジェクトに直接キーを送るとか、オブジェクトの動作そのものを実現するとかは無しか?
2020/07/11(土) 18:21:43.63ID:2M7rjl8q0
大抵のアプリは外部からの要求を受けるのはマウスとキーボードだけだから
433デフォルトの名無しさん (ワッチョイ a346-s8xH)
垢版 |
2020/07/11(土) 18:52:58.44ID:6knL1xMy0
あ、ちょっと失礼。
ほんの少し前、テキストボックスに入力された数式をだったか
マクロだったかをプロシージャにして実行するってなことをやってたんだが
すっかり忘れてしまいました。
どうやるんでしたでしょうか。

OS;Windows 98
Excel 97
2020/07/11(土) 19:37:48.81ID:Nux+IN340
>>418
そんな不具合見たことないな。
VBA限定で、VBSから使うと出ないとか?
435デフォルトの名無しさん (ワッチョイ cb8e-edot)
垢版 |
2020/07/11(土) 20:21:11.98ID:UiWBFlGj0
>>433
死ね
2020/07/11(土) 23:15:56.45ID:vrrLv2a80
>>433
そのうち思い出すから
2020/07/12(日) 08:33:32.60ID:lihdyx4V0
>>433
Application.Run
2020/07/13(月) 14:37:54.03ID:1lzMxcCPM
sendkeys問題解決しました
ありがとう!create object wscript.shell.sendkeysでうまいこと行けた
439デフォルトの名無しさん (ベーイモ MM2b-EFBW)
垢版 |
2020/07/14(火) 20:11:25.31ID:zXCz2P4SM
二つのieを起動して2つ目のieにpdfを表示させてそのpdfをexecwbのsaveasで名前をつけて保存したいのですが名前をつけて保存ダイアログに一つ目のieのファイルが保存項目として表示されてしまいます。どなたかわかる方教えてください。よろしくお願いします。

これがそのコードです getIE はシェル取得ファンクションです
長すぎると書き込めないので省略しました
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "http://book.impress.co.jp/appended3384/4-4.html";

Dim ie2 As InternetExplorer

Set ie2 = CreateObject("InternetExplorer.Application")

ie2.Visible = True

ie2.Navigate2 "C:\\Desktop\test.pdf", 1

Set ie2 = getIE("test")

Dim test As String

test = "c:\test\test.pdf"

ie2.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, test


End sub
2020/07/15(水) 02:33:14.34ID:ZAnqbcST0
Excelでやることか?
2020/07/15(水) 04:42:17.63ID:IqfNcqeZ0
>>439
5ch では、同じ質問のマルチポストは禁止です!

もう1つのスレの方で、やってください!
2020/07/15(水) 05:05:59.66ID:T7WU5W0H0
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)

n = ws2.Cells(Rows.Count, "E").End(xlUp).Row
n = n + 1

For i = 2 To ws1.Cells(Rows.Count, "A").End(xlUp).Row
j = 1

ws2.Cells(n, 5).Value = ws1.Cells(i, j).Value
n = n + 1
j = j + 1

ws2.Cells(n, 5).Value = ws1.Cells(i, j).Value
n = n + 1
j = j + 1

ws2.Cells(n, 5).Value = ws1.Cells(i, j).Value
n = n + 1
j = j + 1

ws2.Cells(n, 5).Value = ws1.Cells(i, j).Value
n = n + 1
j = j + 1

ws2.Cells(n, 5).Value = ws1.Cells(i, j).Value
n = n + 1
j = j + 1


これが10回ほど続くんですか簡潔にかけませんか?
2020/07/15(水) 05:28:08.89ID:jQlbMrrka
え?VBAって二重ループ出来ないの?


エクセルVBAの二重ループについて
https://oshiete.goo.ne.jp/qa/7136635.html
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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