Excel VBA 質問スレ P ..
[2ch|▼Menu]
2:デフォルトの名無しさん
20/08/30 12:04:22.80 y5djTSPl0.net
IEの代わりは何使えばいいの?

3:デフォルトの名無しさん
20/08/30 12:07:17.32 IcnEVpl4a.net


4:デフォルトの名無しさん
20/08/30 12:41:50.27 wybDtxdZd.net
以下の特徴を持つ書き込みは無視するか罵倒されます。
・「教えて」「助けて」で始まる質問者の頭が悪いことが容易にわかる質問
・自分で考えるともせず全部作ってもらおうとする厚かましい質問
・VBA、マクロに関係ないExcelの質問
・自分のために利用するだけ利用してやろうと、後出しで条件を付け加える人

5:デフォルトの名無しさん
20/08/30 20:36:42.00 Cc0wen40a.net
Testフォルダの中に複数のテキストファイルがあり、それぞれのテキストファイルの中身を1つのエクセルシートに取り込みたいのですが、うまくいきません。
test()をfunc()の中で使えないか考えています。
Sub fun()
Dim fso, file, files
Dim folderPath As String: folderPath = "G:\Test\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set files = fso.GetFolder(folderPath).files
For Each file In files
Dim wb As Workbook
'Set wb = Workbooks.Open(file)
Dim ts As Object
Set ts = fso.OpenTextFile(file, ForReading)
'Call wb.Close(SaveChanges:=False)
Next file
End Sub

6:デフォルトの名無しさん
20/08/30 20:37:09.10 Cc0wen40a.net
Sub test()
Dim folderPath As String: folderPath = "G:\Test\"
Dim textLine, fileName As String
Dim fileToOpen As Integer
Dim i As Integer
fileName = folderPath & "01.txt"
fileToOpen = FreeFile()
Open fileName For Input As fileToOpen
i = 1
While Not EOF(fileToOpen)
Line Input #fileToOpen, textLine
Cells(1, i).Value = textLine
i = i + 1
Wend
End Sub

7:デフォルトの名無しさん
20/08/30 21:02:31.41 Cc0wen40a.net
すみません。何とか事故解決しました。
もしこう書けばより良いとアドバイス頂けたら幸いです。
Sub fun()
Dim fso, file, files
Dim folderPath As String: folderPath = "G:\Test\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set files = fso.GetFolder(folderPath).files
Dim j As Integer
For Each file In files
Dim wb As Workbook
'Set wb = Workbooks.Open(file)
Dim ts As Object
Set ts = fso.OpenTextFile(file)
Dim i As Integer: i = 1
j = j + 1
Do Until ts.AtEndOfStream
Cells(j, i).Value = ts.ReadLine
i = i + 1
Loop
ts.Close
'Call wb.Close(SaveChanges:=False)
Next file
End Sub

8:デフォルトの名無しさん (ワッチョイ 29e5-pBCo)
20/08/30 22:17:56 dZGkK/a70.net
入門レベルで横槍入れるようで申し訳ないのですが
forループ以前とループ内でのDim〜は何が違いますか?

9:デフォルトの名無しさん
20/08/30 23:52:40.61 RQLT4uuu0.net
>>8
違いは見やすさだけ
機能はどこに書いても同じ
マイクロソフトは最初にまとめて書けと言ってる

10:デフォルトの名無しさん
20/08/30 23:59:24.87 RQLT4uuu0.net
>>7
宣言と初期化を一度に書きたくなる気持ちはわかるけど、マルチステートメントはやめた方がいい

11:デフォルトの名無しさん (ドコグロ MMca-ftwo)
20/08/31 00:06:45 SE//WJVaM.net
誰に言われるまでもなく上に全部まとめて宣言しているわ
違うプロシージャにそのままコピペで流用して使わないのは消すだけ

12:デフォルトの名無しさん (ワッチョイ c13d-7m6G)
20/08/31 00:13:33 TQg4kwht0.net
>>7
Cellsの前にはワークシート名書いといた方が絶対にいいよ
CodeNameでいいから前に書いときな

13:デフォルトの名無しさん
20/08/31 19:07:17.70 Lt7FggAF0.net
B列に"2020/8/1"のように日付が入っていて
B列に"発行日"&和暦を入力したいのですが、年・月・日がそれぞれ1桁の場合は頭に0が入ってしまします。
1桁の場合は、0の代わりに半角スペースにしたいのですがどう書けばいいですか
Dim r As Long
For r = 1 To Cells(Rows.Count,1).End(xlUp).Row
Cells(r,2).Value = Format(CDate(Cells(r,1)), "ggge年m月d日")
Next r

14:デフォルトの名無しさん (アウアウウー Sa85-7m6G)
20/08/31 19:10:36 ZuoShitIa.net
>>13
Month関数使えば判定できるとか

15:デフォルトの名無しさん (アウアウエー Sa0a-ifKp)
20/08/31 19:11:34 0S1gXD8ua.net
>>10
>>12
助言ありがとうございます。

16:デフォルトの名無しさん
20/08/31 20:25:23.41 Zj98ZIJ+0.net
>>13
For r = 1 To Cells(Rows.Count, 1).End(xlUp).Row
  Cells(r, 2).Value = Replace(Replace(Format(CDate(Cells(r, 1)), "ggge年mm月dd日"), "年0", "年 "), "月0", "月 ")
Next r

17:デフォルトの名無しさん
20/08/31 21:02:20.59 Lt7FggAF0.net
>>16
ありがとうございます

18:デフォルトの名無しさん
20/09/01 16:02:43.57 IEy7mEwuM.net
vba実行時
実行時エラー2147467259(80004005)エラーを特定できません
が出ます。
半月前は出ませんでした。
どうすれば良いでしょうか。
具体的に申しますと
pdfをテキストにコンバートする関数に
入った直後に出ます。
Dim objAcroApp As New Acrobat.AcroApp
Dim id As Long
id=objAcroApp.Show←ここで出ます
事情がありスマホで手打ちしました。
見苦しくすみませんがよろしくお願い申し上げます

19:デフォルトの名無しさん
20/09/01 19:54:21.29 GHp5MfoEM.net
小計シートのA列に日付があります
1.メニューシートでリストボックスを設置して、そこに小計シートのダブりを省いた日付を入れて選択できるようにしたいです
2.メニューシートの実行ボタンを押すと選択した日付の行全てを結果シートに出力したいです
どのような関数を使えば1、2を実現できるのでしょうか?

20:デフォルトの名無しさん
20/09/01 20:49:46.16 4J5+lU0z0.net
神経衰弱を作っています
Image1~52を並べて全てのImageにクリックされた時の処理を記述しているのですがImageがクリックされた時の処理をひとつにまとめる方法はないでしょうか?

21:デフォルトの名無しさん
20/09/01 21:43:46.76 rkSCdRtt0.net
>>20
1つにまとめて、どこをクリックされたかは座標で特定するとか。

22:デフォルトの名無しさん
20/09/01 21:46:04.84 rkSCdRtt0.net
>>18
vbsでも同じエラー出る?

23:デフォルトの名無しさん (ドコグロ MMca-yRqa)
20/09/01 21:59:11 o1zup8QpM.net
>>20
Imagename = Application.Caller
i = Mid(Imagename, 6)

あとは、Select Caseで割り振る

24:デフォルトの名無しさん (ワッチョイ 0d7c-JMbW)
20/09/01 22:12:33 0zlN/jAw0.net
>>20
マクロ登録に引数を付けるかApplication.Callerを使う

25:デフォルトの名無しさん (ワッチョイ 4d10-t21d)
20/09/01 22:24:18 4J5+lU0z0.net
Application.callerよさそうですね
使ってみます
ありがとうございました

26:デフォルトの名無しさん
20/09/02 02:29:09.58 wtN1DZWS0.net
>>19
一気に答えがで関数があると思うな

27:デフォルトの名無しさん
20/09/02 02:29:31.03 wtN1DZWS0.net


28:デフォルトの名無しさん
20/09/02 04:35:56.53 A3FRNSa90.net
>>20
一度、VBA コントロール配列 あたりでググってみると良いかもしれない

29:デフォルトの名無しさん (スププ Sd7f-2VA6)
20/09/02 06:20:17 PYA1799od.net
>>20
クラス作ってWithEventsおすすめ。

30:デフォルトの名無しさん
20/09/02 20:49:21.06 hWT8nCmb0.net
神経衰弱を作っています
カードを2枚裏返して2枚の数字が同じだった
Image1.visible = falseで2枚を非表示にしています
ゲーム途中でコマンドボタンを押すと1から13までのランダムな数字の枚数だけ裏面のカードを表にしたいのですが今のコードだと既に非表示になっているカードまで表にする対象になってしまっていて13という数字を引いても5枚しかめくれないみたいな状態になってしまいます
どうすれば既に非表示になっているカードは除いて表面にする処理ができるようになるでしょうか?
ゲーム開始直後の状態であればちゃんと引いた数字分表面にすることができています

31:デフォルトの名無しさん (スフッ Sd7f-7sgX)
20/09/02 20:58:13 RVYxtb8Vd.net
非表示の時は表示しなければいいのでは…

32:デフォルトの名無しさん (ワッチョイ 5f1f-W64q)
20/09/02 21:06:16 wVSDLDLi0.net
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開く文字書き込み

こんな感じに開いてたら閉じる。違うファイルなら閉じて新たに開くってどうしたら
いいですか?

33:デフォルトの名無しさん
20/09/02 21:08:43.99 0x5o6h4cd.net
>>32
その処理のどの部分で躓いてんの?

34:デフォルトの名無しさん
20/09/02 21:43:27.34 M5ACMng3M.net
>>30
If Worksheets(シート名).Shapes("Image" & カード番号).Visible = False Then

35:デフォルトの名無しさん
20/09/02 22:11:52.19 0x5o6h4cd.net
>>34
それだと非表示にしたカートまで表示される

36:デフォルトの名無しさん (アウアウカー Sa9b-vRCQ)
20/09/02 22:44:34 7eaUdZ9ha.net
>>30
表裏の切り替えできてるなら裏かつvisibleだけ処理すりゃいいと思う

37:デフォルトの名無しさん
20/09/02 23:26:58.04 CEKOaVwIM.net
>>35
じゃあ、trueに変えればいいじゃん

38:デフォルトの名無しさん (ワッチョイ 7f63-3NJ+)
20/09/02 23:43:34 4SR2iB8C0.net
>>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
プログラム以外のところに原因があるんでしょうか。

39:デフォルトの名無しさん (ワッチョイ 7f63-3NJ+)
20/09/02 23:44:24 4SR2iB8C0.net
sはこれでエラーが出ませんでしたが

vbsは・・・
です。失礼しました。

40:デフォルトの名無しさん
20/09/02 23:59:58.13 86SCKcxdd.net
>>37
カードの非表示状態を管理するなりしないと単純にvisibleだけ見ても意味ないよ

41:デフォルトの名無しさん (スプッッ Sdff-W64q)
20/09/03 07:25:12 VXBXo8cBd.net
>>33
次のファイルが同一ならそのままで、違うファイルなら閉じて開くの処理の仕方が分かりません。

42:デフォルトの名無しさん
20/09/03 09:49:18.05 8vHUVo2kM.net
>>40
visibleプロパティで管理してるんだから問題ないだろ
13回選んで4回裏が出たら17回選べばいいんだよ

43:デフォルトの名無しさん (ワッチョイ 5f80-uomc)
20/09/03 10:06:52 wpeUBEOu0.net
>>41
ファイル名保持して、ファイル名が同一ならそのまま、違ったら閉じて開くだけ?isbookopen使うとか?

44:デフォルトの名無しさん (ワッチョイ c7da-XrX+)
20/09/03 20:23:29 xDfSE2i10.net
>>38
CreateObject("AcroExch.App")
CreateObject("AcroExch.PDDoc")
しなきゃダメなんじゃ・・。
そういう問題ではない?

45:デフォルトの名無しさん
20/09/03 20:28:15.84 xDfSE2i10.net
あと、1回だけ成功したのなら、
馬鹿馬鹿しいと思うかも知れないけど、
DoeventsかSleepを入れてみるとか。

46:デフォルトの名無しさん (ラクッペペ MM8f-qH39)
20/09/04 12:46:00 lx1E7kKYM.net
csvをある列でフィルタし
結果を別のブックに貼り付け
csvとして保存したところ
日付+時刻(ゼロ時)の列すべて
5桁の数字になります
どうしたら日付+時刻のままで
いてくれますか

47:デフォルトの名無しさん
20/09/04 14:35:51.29 cB2Mz28T0.net
文字列として貼る

48:デフォルトの名無しさん
20/09/04 16:31:17.78 9qR3rveJ0.net
>>46
VBAの話しか?

49:デフォルトの名無しさん
20/09/04 17:16:17.55 lx1E7kKYM.net
>>48
はぃ、vbaでそういう処理を書きました

50:デフォルトの名無しさん (アウアウクー MMbb-DxLX)
20/09/04 19:53:46 F8mRPL3VM.net
一定間隔でマクロ実行する方法はなんとなくわかるのですが、不規則な間隔(5秒〜90秒)でマクロ実行したいのですが
どんなやり方がありますか?

51:デフォルトの名無しさん
20/09/04 20:18:00.24 1AlCas5O0.net
>>46
日付が5桁の数字って、44078とかだろうけど、
多分フィルタもCSVも関係ない。
値貼り付けしちゃってる。

52:デフォルトの名無しさん
20/09/04 20:24:24.36 1AlCas5O0.net
>>50
Rnd使うのが一般的なんだろうけど、アホな方法を挙げると、
誰かが作った不規則をパク

53:デフォルトの名無しさん
20/09/04 20:26:21.57 1AlCas5O0.net
ってくるとか。
例えばライブカメラの画像をDLして使うとか。

54:デフォルトの名無しさん
20/09/04 22:27:33.32 awq2GZ8I0.net
>>50
マクロの最後にApplication.OnTimeを書く
現在時刻に乱数で秒数を足す

55:デフォルトの名無しさん
20/09/04 23:53:41.25 3ZUt+s6n0.net
モジュール1で定義した配列をモジュール2で使うにはどうすればいいですか?
モジュール1でdimではなくpublicで宣言すればいいのでしょうか?

56:デフォルトの名無しさん
20/09/04 23:56:30.81 LK01+huQd.net
なんでそれをやってみないの

57:デフォルトの名無しさん
20/09/05 00:15:03.09 oZJVOAAi0.net
>>51
すべてご推察のとおりです。ありがとうございます。
xlPasteValuesで張り付けてます。
xlPasteAllだと年が月日の後になってしまいます(5/31/2020 0:00)
>>47さんのおっしゃる
「文字列として」貼り付ける設定を発見できません。
""で囲めば文字列として貼り付けられるのでしょうか。

58:デフォルトの名無しさん
20/09/05 00:15:37.71 wG6iKMy+0.net
最近また馬鹿が出てきた

59:デフォルトの名無しさん
20/09/05 00:20:53.60 dEfSwWqXd.net
>>57
セルの書式設定

60:デフォルトの名無しさん
20/09/05 07:07:58.26 8ZVzqJQh0.net
CSVで保存したら書式通りで保存されたっけ?

61:デフォルトの名無しさん (ワッチョイ 27ce-n8ne)
20/09/05 08:05:59 aR6FsABo0.net
>>60
される

62:デフォルトの名無しさん
20/09/05 10:12:38.88 LyoNVqbOr.net
A1に3、B1に100といれ、実行すると、
3から100行までを非表示にするマクロお願いします

63:デフォルトの名無しさん
20/09/05 13:47:16.04 CLMpHe/Q0.net
基本技術の試験勉強してるのですが、
URLリンク(www.fe-siken.com)
この過去問の設問3のマクロの文章の和訳というか、各行がどんな処理をしているのか日本語で説明できる方いませんか
あと、変数iなんですが、なぜiなんでしょう
よろしくお願いいたします

64:デフォルトの名無しさん
20/09/05 14:03:42.79 4XqPsYsKd.net
ループカウンタ用の変数名はとりあえずiにでもしとこうっていう昔からの名残
細かく言うと整数を表すIntegerのi
i、j、k〜nまで順によく使われる

65:デフォルトの名無しさん (ワッチョイ 0701-zmOT)
20/09/05 14:08:56 CLMpHe/Q0.net
>>64
ありがとうございます
特にこだわる深い意味は無いのですね
助かります

66:63 (ワッチョイ 0701-zmOT)
20/09/05 14:19:36 CLMpHe/Q0.net
何度もレスしてすいません。
問題の文章とVBAのマクロの文章を照らし合わせて回答をみると何となく答えがわかる気がしてきたのですが、

相対(a2,work_line,3)

がなぜ来店状況ワークシートのセルd列のことになるのか分かりません。
3列目なのでcだと思ったのですが…

67:デフォルトの名無しさん (ササクッテロ Spbb-Yyeh)
20/09/05 14:51:37 OBeOSrHnp.net
>>64
indexかと思っていたんだが

68:デフォルトの名無しさん
20/09/05 15:12:53.61 JRHWh/h7d.net
>>66
列番号ではなくA列から相対的に数えて何個右の列かってことだろう

69:デフォルトの名無しさん
20/09/05 15:15:25.53 jnQOfSyba.net
>>66
問題見てもないけど、相対って書いてあるからB列から始めてるんじゃ?
と思ったけどレス見ると3次元配列っぽいしよくわからん

70:デフォルトの名無しさん
20/09/05 15:16:40.51 YqeHmb95d.net
相対(A2,work_line)も同じ考え方だぞ?

71:デフォルトの名無しさん
20/09/05 15:19:54.14 Xd3OIwcX0.net
>>63
fortran起源説

72:デフォルトの名無しさん
20/09/05 15:20:15.06 YqeHmb95d.net
vbaに直すとrange("A2").offset(work_line,3)

73:63
20/09/05 16:21:30.22 zirZG8//r.net
>>68
>>72
ありがとうございます!!
理解しました!

74:63
20/09/05 16:23:09.92 ZUfl2WLX0.net
>>70
すいません
そもそもそれもよく分かってなかったのです。
ちなみに良かったらどういう意味が教えて欲しいです。
聞いてばかりで申し訳ありません。

75:デフォルトの名無しさん
20/09/05 16:25:38.15 STsU3nz1r.net
>>64
インデックスじゃないの?

76:デフォルトの名無しさん
20/09/05 16:34:57.30 BMRcPhN/d.net
>>74
列がわかったなら行もわかるはずだが…

77:デフォルトの名無しさん
20/09/05 17:24:34.57 wG6iKMy+0.net
>>74
そろそろ消えろ

78:デフォルトの名無しさん
20/09/05 17:30:09.65 k1PkCOGDM.net
>>74
相対(a2,行,列)
0の場合は省略可なので
相対(a2,行)とか相対(a2,,列)でもいい

79:デフォルトの名無しさん (スフッ Sd7f-7sgX)
20/09/05 17:54:39 HmyJ6FBVd.net
>>78
それはvbaのoffsetの構文であって設問の問題文とは関係ないな

80:デフォルトの名無しさん
20/09/05 18:10:48.71 BBnzOe5t0.net
>>62
の質問内容がひどすぎて
誰もくいつかないなw

81:デフォルトの名無しさん
20/09/05 18:23:56.02 eBP4WmWUa.net
お金が発生するわけでもないし

82:63 (ワッチョイ 0701-zmOT)
20/09/05 18:58:31 ZUfl2WLX0.net
>>78
ありがとうございます。
とても助かりました。

83:デフォルトの名無しさん
20/09/05 20:42:59.70 XhaSpdgL0.net
>>62
Range(Rows(Range("A1").Value), Rows(Range("B1").Value)).Rows.Hidden = True

84:デフォルトの名無しさん
20/09/06 09:47:35.66 cKQMszzk0.net
>>57
値で貼り付けるなら、後から
.NumberFormatLocal = "yyyy/m/d h:mm;@"

85:デフォルトの名無しさん
20/09/06 09:49:52.25 cKQMszzk0.net
>>63
答えは簡単だが、質問が難しすぎる。

86:63
20/09/06 14:01:01.76 spMqG8Fw0.net
>>85
上手く質問できなくて申し訳ありません。
全体的な単語の一つ一つの意味が知りたかったのです。
お手隙ならばで構わないのですが、
URLリンク(www.fe-siken.com)
この問題の設問3の重みパラメータというのがどう作用して出力Zの値になるのか教えて頂けないでしょうか。

87:63
20/09/06 14:02:20.47 spMqG8Fw0.net
あ、すみません。問題よく読んでませんでした。
これについてはレス直後理解しました。
ごめんなさい( ;ᯅ; )

88:63
20/09/06 14:27:55.58 spMqG8Fw0.net
URLリンク(www.fe-siken.com)
この設問1の答えなんですが、この文でどうして結合とか保護者の氏名と住所を抽出するのですか?

89:デフォルトの名無しさん
20/09/06 14:33:06.47 PpfBKGYq0.net
>>84
これで出来ました
ありがとうありがとうありがとううううううううーー

90:デフォルトの名無しさん (ワッチョイ 7f8e-+abr)
20/09/06 18:43:46 Mql9n0EK0.net
>>88
死ね

91:デフォルトの名無しさん
20/09/07 05:30:38.87 OoqPbQfP0.net
>>90
お前が死ね
ゴミ山猿の屑野郎

92:デフォルトの名無しさん (ワントンキン MMab-AmFM)
20/09/07 12:55:41 ZbJzmFKoM.net
>>91
内容も読まずに書くなよクズ。SQLのことだろうが。

93:デフォルトの名無しさん
20/09/07 18:18:17.86 R5ozSk7c0.net
ここで質問したらダメだったみたいですね
該当スレとかあるのでしょうか

94:デフォルトの名無しさん
20/09/07 18:26:10.30 aZP2Fcscd.net
>>93
スレリンク(welfare板)

95:デフォルトの名無しさん
20/09/07 18:43:17.53 K46ocmR8a.net
>>88
これをどこで聞けばいいのかもわからなかったらFE受かるの難しいよ…

96:デフォルトの名無しさん
20/09/07 20:07:21.03 Yu9E5X6OM.net
VBA勉強しはじめて、ようやくOutlook連携とかzip圧縮とかやり始めたんだけど
Excelそのものの操作に関する情報と比べて、参考に出来る情報の質も量もガクッと落ちた気がする
やっぱ話題のpythonに切替えたほうが悩まずやれるのだろうか

97:デフォルトの名無しさん
20/09/07 20:09:11.40 Yu9E5X6OM.net
質も量も、っていうのはノンプログラマーの自分が探せる範囲って意味です

98:デフォルトの名無しさん
20/09/07 20:22:49.70 sgrgY4Mk0.net
zip.exe叩けばええやろ

99:デフォルトの名無しさん (ワッチョイ 5f6d-4jJb)
20/09/07 20:51:37 /DR3/4oV0.net
目の前に答えが書いてあっても理解できない、答えだと気付けない
これが「馬鹿には無理」の意味

100:デフォルトの名無しさん (テテンテンテン MM8f-Ccsn)
20/09/07 21:00:18 Yu9E5X6OM.net
半年ROMって勉強します押忍押忍押忍

101:デフォルトの名無しさん
20/09/07 21:22:51.97 JIC+p5t3M.net
何をしたいかによるけど、Windowsの操作の自動化っていう範疇ならPowerShellおすすめ
Comオブジェクトも使えるよ

102:デフォルトの名無しさん
20/09/07 21:38:02.53 J1GBImUha.net
なにがおかしいの?
Sub func()
Dim url As String: url = "URLリンク(e-hentai.org)
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

103:デフォルトの名無しさん
20/09/07 22:46:01.59 qahfABoQ0.net
IEはもう無くなるよ

104:デフォルトの名無しさん
20/09/07 22:49:52.43 744b2nM10.net
>>102
Dim objLinks As String

105:デフォルトの名無しさん
20/09/07 22:54:20.72 VQNIMFGd0.net
>>103
IEの代替え何使ったらいいの?

106:デフォルトの名無しさん (ワッチョイ 27ce-n8ne)
20/09/07 23:07:32 744b2nM10.net
>>105
データをダウンロードするだけならブラウザを使わずに直接ネットアクセスした方が早くて簡単
色んな方法があるけどXMLHTTPとかWinHttpRequestとか調べてみ

107:デフォルトの名無しさん (ワッチョイ bfc9-XrX+)
20/09/07 23:17:00 VQNIMFGd0.net
>>106
ありがとうございます


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

みたいなことしないとアクセスできないサイトのデータが取得したいのですが
他に方法ありますか?

108:デフォルトの名無しさん (ワッチョイ e7e6-n8ne)
20/09/07 23:22:23 sgrgY4Mk0.net
JavaScriptを読んで何やってるか調べろ

109:デフォルトの名無しさん
20/09/07 23:49:39.86 744b2nM10.net
>>107
Form送信は単純なHTTPアクセスで代替できるケースが多いから、これもブラウザを使う必要はない
てか、WEBの構造はVBA関係ないし

110:デフォルトの名無しさん
20/09/07 23:56:10.64 UwONkXQv0.net
エクセル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:デフォルトの名無しさん
20/09/08 02:03:49.70 weDKADyMM.net
>>110
for i= activeworkbook.worksheets.count to 1 step -1
apprication.goto activeworkbook.worksheets(i).range("a1")
next i
activeworkbook.save
スマホ打ちだから綴りミスはあるかも

112:デフォルトの名無しさん
20/09/08 07:47:00.42 vMdvrooDa.net
>>110
For eachで全シート回してるならActivateしなくても、
sh.Range("A1")で行けないか?

113:デフォルトの名無しさん
20/09/08 07:48:01.88 vMdvrooDa.net
>>112
間違えたsh.Range("A1").Selectだわ

114:デフォルトの名無しさん (ワッチョイ 27da-XrX+)
20/09/08 10:40:31 C66iYfBu0.net
>>110
働かないという場合の原因で以下のことを調べてみ

1.実は働いていたがその後に別の動作をしたため働いていないように見える
2.働こうとしたが、なんらかの異常が出て失敗している
3.その処理が実行されていない(on errorやifの条件、イベント発生していないなど)

115:デフォルトの名無しさん
20/09/08 11:03:00.55 0vfIbeP00.net
>>105
漏れは、yahoo のログインとか、
Ruby, Selenium Webdriver で、ブラウザを自動操作してる
単純なダウンロード・スクレイピングなら、RubyのNokogiri。
外部コマンドなら、curl, wget

116:デフォルトの名無しさん (ラクッペペ MM8f-dQ4P)
20/09/08 11:52:57 POT3YWITM.net
Application.EnableEvents=Falseしてるとか?

117:デフォルトの名無しさん
20/09/08 16:58:59.99 qXkQmTRa0.net
“>-1”&i
て書いたときに >-2, >-3... っていうふうに比較値が意図せず負に進むんだけど正の値に足したい場合ってどうすれば良いでしょうか。

118:デフォルトの名無しさん
20/09/08 18:39:01.86 p9XW8v7Na.net
>>117
VBAの挙動の問題
-を文字列、1を数値として認識してる
そもそも、-1をダブルクォーテーションで括ってるのは文字列として-1を認識させたい時のみにするのが基本
なので、ダブルクォーテーションを取ってやれば意図通り動くはず

119:デフォルトの名無しさん
20/09/08 19:07:42.80 Pjd0b/NhM.net
へー、そんな挙動するんだ。知らなかった
>-11
>-12
>-13
になると思ってたよ

120:デフォルトの名無しさん
20/09/08 19:08:20.88 E23V8S4o0.net
>>113
activeじゃないシートはselectできないと思うが

121:デフォルトの名無しさん
20/09/08 19:10:47.69 E23V8S4o0.net
>>110
Forの中身が間違ってるとか別のブックを見てるとか
ほんとに選択したいシートが選択されてるか確認した?

122:デフォルトの名無しさん
20/09/08 20:06:33.41 qXkQmTRa0.net
>>118
クォーテーション外してやってみたけど上手くいかないです...
初心者なんで拙いですが、一応自分で書いたものをのせます。
既出のデータを整理して2次元チャートを作成する目的です。
Dim cnt As Integer
Dim x As Long
Dim y As Long
x = 0
y = 0
For x = 0 To 10
For y = 0 To 10
cnt = WorksheetFunction.CountIfs(Range("B2", Range("B2").End(xlDown)) "<=" 0 + x, Range("B2", Range("B2").End(xlDown)) ">= -1" & x, Range("C2", Range("C2").End(xlDown)) "<= 0" & y, Range("C2", Range("C2").End(xlDown)) ">= -1" & y)
Cells(x , y) = cnt
Next y
Next x

123:デフォルトの名無しさん
20/09/08 20:34:38.38 E23V8S4o0.net
いつも人任せだな…
そのcountifの引数の中身が自分の意図した内容かなんで確認しないの?

124:デフォルトの名無しさん (ワッチョイ 5fb5-/qgI)
20/09/08 21:43:07 MiWYYVaX0.net
もう30過ぎて勉強もなぁ…って手が進まない
VBAを知識をパンパンに詰め込んでああこれねって感じでカタカタと打ち込んでプロシージャ作りたいもんだわ

125:デフォルトの名無しさん (ワッチョイ e77c-ALHH)
20/09/08 21:57:43 E23V8S4o0.net
考えることを人に丸投げしてるだけで勉強は関係がない

126:デフォルトの名無しさん (ワッチョイ 5fb5-/qgI)
20/09/08 22:00:12 MiWYYVaX0.net
人に丸投げというかネットで拾ったものの組み合わせでいつも何とかしてしまう
知識がほとんど入らない
異動希望出してるしなぁ

127:デフォルトの名無しさん
20/09/08 22:06:16.19 aT8iqlgZ0.net
エクセルの指定列から3列コピーしてその4列目に挿入して貼り付けた後セルに入ってる値を消すコードをRangeじゃなくてCellsでやりたいです。
clmtar=10
10〜13列をコピー
14列目に挿入
14〜17列目のセルの値クリア。

128:デフォルトの名無しさん
20/09/08 22:11:08.52 +kf0/gdp0.net
>>127
コピー後の値を消すの?
元通りになるだけだと思うけど

129:デフォルトの名無しさん
20/09/08 22:29:42.46 C66iYfBu0.net
>>126
愚痴る暇があったら入門書かって1ページでもいいから読んでろ

130:デフォルトの名無しさん
20/09/08 22:34:56.39 MiWYYVaX0.net
>>129
すんません…なんか職場でおばちゃんがあれも作ってとか調子こいてるだけで
こりゃまた愚痴だわ
これぞ!っていう入門書ありますかね
イチからガチで鍛えてみるかな

131:デフォルトの名無しさん
20/09/08 22:36:08.93 8mxHLcBxa.net
>>126
なんとかできてるならそれも実力のうちなのだと思うよ
楽しい、自分ならこうしてみたい、こうしたらどうなるのだろう
とかがないならそこまでだけど

132:デフォルトの名無しさん
20/09/08 22:40:05.68 MiWYYVaX0.net
ネットで検索
プロシージャを組み合わせたり簡単なところをイジる
出きたと思ったら会社のメルアドにプロシージャ貼り付けたテキスト送る
会社で組み合わせる
UserFormのボタンに割り当て
これでごまかしつつやってきた
圧倒的な知識が欲しいなぁと

133:デフォルトの名無しさん
20/09/08 22:47:12.09 C66iYfBu0.net
>>130
それすら他人に頼るようじゃいつまでたっても進まない

134:デフォルトの名無しさん
20/09/08 22:50:54.91 E23V8S4o0.net
今までどおり困ったら初心者ですとか勉強中ですとかで知識ないアピールで人にやらせて突っ込まれたら謎の正当化とどうでもいい言い訳で誤魔化してやっていくんだろうな

135:デフォルトの名無しさん
20/09/08 22:52:28.72 MiWYYVaX0.net
ネットで調べてなんとかなってしまう時代のせいだよね
俺は悪くない

136:デフォルトの名無しさん (アウアウウー Sa8b-yCsQ)
20/09/08 23:27:06 HhRrDF1oa.net
そういう人が増えてきたからあんまり教えないようにしてる

137:デフォルトの名無しさん
20/09/09 00:19:56.45 akgtbWjMM.net
ゆとり世代の特徴だぞ

138:110
20/09/09 00:23:30.44 Lvk20igu0.net
>110です。
書き込み後にいろいろググったところ、いくつかのサイトで
コードからの保存はbeforeSaveイベントが正常に働かない旨の記載がありました。
今回の事象もこれに当たるのかなと考えています。
そんな訳で、ボタンでの保存はenableEventsをfalseにして別処理にしました。
回答くださった皆様、ありがとうございました。

139:デフォルトの名無しさん (ワッチョイ eab5-mjPJ)
20/09/09 00:53:57 0o8c0VF10.net
別にここで聞いても答えなんて返ってこないし期待してないのでご安心を

140:デフォルトの名無しさん (ワッチョイ 39e6-Pwf7)
20/09/09 01:12:42 VoppH/up0.net
足し算がわかりませんとか言われても入門書でも読めとしか言えないよな

141:デフォルトの名無しさん
20/09/09 04:06:45.89 Y+JI74HRa.net
入門書読めと言うとどの入門書がいいか聞いてくるよ

142:デフォルトの名無しさん
20/09/09 08:19:04.77 z9RILJ2v0.net
入門書を紹介すると今度はどこで買えばいいか聞いてくるよ

143:デフォルトの名無しさん
20/09/09 09:27:32.52 8tppu1V70.net
通販で買えって言うとお金がないって言ってくるよ

144:デフォルトの名無しさん
20/09/09 09:43:27.85 9AZapVJXM.net
お金あげると姿をくらますよ

145:デフォルトの名無しさん (ワッチョイ 397c-bL/7)
20/09/09 10:03:14 I5K9tGVf0.net
しかも捨て台詞付きで

146:デフォルトの名無しさん
20/09/09 10:37:20.74 KbsHkxtjM.net
すみません。ちょっと長くなってしまうのですがTreeViewをいじっているうちに分からない事があったので教えて下さい。
TreeViewの子ノードをD&Dでリストボックスにコピーする動作を作っていたのですが、ドラッグ開始時点のSelectedItemを取得しようとすると1度子ノードをクリックした上でD&Dを行う必要がありました。
その為、既定引数のIPOS,yPOSを使ってHitTestをSelectedItemに代入しようとしました。
しかしそれが上手く動作せず色々調べた結果、
xとyに*15をすると言う記述を見つけ試してみたところ、思い通りの動作を得られました。
しかしながらこの15はなんの15なんだ。他の環境ではこの数値は変わるのか。変わるならば何を元に算出すれば良いのだろうか。
という疑問が浮かびました。
お手数をお掛け致しますがお分かりになる方がいらっしゃいましたらご教授頂けませんでしょうか。

147:デフォルトの名無しさん (ワッチョイ 6a2f-sa+Q)
20/09/09 14:26:55 dKuEV/F30.net
まずその15をかけるってどこに書いてあったんだよ

148:デフォルトの名無しさん (アウアウカー Sa55-hUiG)
20/09/09 16:31:31 0Qh2iKtEa.net
Windows標準のシステム解像度だとピクセルとTwipsの比率が1:15だからってスタックオーバーフローに書いてあった

149:デフォルトの名無しさん (ラクッペペ MM3e-AH3D)
20/09/09 17:07:35 cdbk3sfrM.net
c言語のdefineに相当する文法は無いですか?
constだと違和感がありますので

150:デフォルトの名無しさん (ブーイモ MM8e-+eY2)
20/09/09 17:36:02 KbsHkxtjM.net
>>148
助かります
ありがとうございました

という事は使用環境次第では正常に動作しない場合も有り得るって事なのですね。対策を検討してみます。

151:デフォルトの名無しさん
20/09/09 17:50:55.91 jCqtOC3ba.net
>>149
どこに違和感があるのかを言わないと案を出せません

152:デフォルトの名無しさん (ワッチョイ 2a1f-ah1O)
20/09/09 20:59:39 ynJDkc680.net
>>128
コピー後挿入したら隣に3列追加されてセルの長さもコピーした3列と同じになりますよね?

153:デフォルトの名無しさん (ワッチョイ 397c-bL/7)
20/09/09 21:05:53 I5K9tGVf0.net
列幅をコピーすればいいのでは…

154:デフォルトの名無しさん (ワッチョイ 3d3d-PnJR)
20/09/09 21:18:50 Uey8EdNp0.net
>>152
幅を一緒にしたいなら最初からそう書けば良かったのに

155:デフォルトの名無しさん (ワッチョイ a95f-Sism)
20/09/10 00:02:31 a+RPoaYl0.net
>>149
あなたが思っているC言語のdefineの使い方は、コンパイラが置換するもので、定数の概念とは少し違いますよ?

156:デフォルトの名無しさん
20/09/10 00:04:04.82 a+RPoaYl0.net
>>152
そもそも列の挿入操作が必須なのか?

157:デフォルトの名無しさん
20/09/10 00:05:42.63 a+RPoaYl0.net
列の挿入なんてあちこちに影響するから、やりたがる理由がわからない。

158:デフォルトの名無しさん (アウアウウー Sa21-zN8f)
20/09/10 01:40:18 JZj4+m/Aa.net
条件付き書式が壊れたりすると面倒

159:デフォルトの名無しさん (ワッチョイ a95f-Sism)
20/09/10 02:24:17 a+RPoaYl0.net
自分の操作と同じ手順を踏みたいだけなんだろうね

プログラマではない素人感覚

160:デフォルトの名無しさん
20/09/10 04:18:44.38 026ADmyCa.net
test

161:デフォルトの名無しさん (ブーイモ MM8e-4twR)
20/09/10 07:50:51 T4cQI13RM.net
超初心者なんだけど
配列の中から指定値の近似値の座標を検索するのにいい感じの方法はないでしょうか
(以下、以上、完全一致全て含めての近似値)

162:デフォルトの名無しさん
20/09/10 08:50:52.35 l+lun8zfM.net
どうせ大した数じゃないんだろ
総なめしろよ

163:デフォルトの名無しさん
20/09/10 09:29:12.78 rdKJuFJTa.net
>>161
for eachで比較対象値と指定値を全て比較して、結果出力してその中でMIN関数使えば

164:デフォルトの名無しさん
20/09/10 10:03:54.29 QatXFD490.net
>>161
前もってソートした配列作って二分探索か、
配列の値-指定値の絶対値が最小になる値を探す

165:デフォルトの名無しさん
20/09/10 10:32:25.89 vUgEJ8vWd.net
Min(Abs(配列-指定値))

166:デフォルトの名無しさん
20/09/10 12:18:21.67 tJgZROmkM.net
指定値と配列値の差分を絶対値にして比較した場合、
指定値が5だとして
配列  差分(ABS)
4     1
7     2
となり、最小の差分は1とわかる
座標を知りたいので指定値(5)-差分(1)=4となり、配列の中から4を検索して座標を調べればいいのかなって思ってたんだけど
絶対値で出てくると5-1か5+1どっちを検索すればいいか不明じゃないですか?
そこらへんを解決する方法があれば聞きたいです

167:デフォルトの名無しさん
20/09/10 12:33:38.92 l+lun8zfM.net
ひとつに絞りたいならお前がルールを決めればいい
お前に決定権がないなら保護者に聞け

168:デフォルトの名無しさん (ワッチョイ 7d01-pVuC)
20/09/10 12:50:19 /arv21np0.net
ExcelVBAのフレームワークってないんですか?

PHPやJavascriptはまずフレームワーク覚えるもんだと思うのですが
VBAだとそういうのが見当たらなくって・・・

169:デフォルトの名無しさん (ブーイモ MM81-m2CW)
20/09/10 12:52:37 sAyQhYLaM.net
見よう見まねで結構大掛かりなマクロを作った
情シスには程遠い事務の部署で
改善賞1万円
うーんもうちょい欲しかった

170:デフォルトの名無しさん (スフッ Sd0a-EJMP)
20/09/10 13:06:54 PB4qSPsyd.net
オフイスを便利に使うためのお手軽言語でフレームワークの勉強とかやってたら非効率な上に大したメリットもない

171:デフォルトの名無しさん
20/09/10 13:09:58.25 4uvZuCuyM.net
フレームワークという意味ではVBAそのものがVB6のOffice向けフレームワーク
さらに言えばExcel向けに特化したものがExcelVBA
他のOfficeソフトにもそれぞれのVBAがある

172:デフォルトの名無しさん
20/09/10 13:11:29.05 XKC0VKf0M.net
>>167
一つに絞りたいというか最も近しい値を知りたいのです
指定値が5のとき、配列が4と7なら4を、3と6なら6の座標を調べたい
1万行は超えるから総なめはちょっと…

173:デフォルトの名無しさん
20/09/10 13:21:59.05 4mlwjCSed.net
>>172
パソコンにとっては「たった」1万行だよ
総舐めが一番簡単だし、開発時間も含めれば一番早い

174:デフォルトの名無しさん
20/09/10 13:23:29.76 4mlwjCSed.net
総舐めでもここでグダグタ言ってる間に結果が出る

175:デフォルトの名無しさん
20/09/10 13:38:32.36 l+lun8zfM.net
>>172
は? 質問は4と-4だろ?
もう俺が決めてやるよ
-4にしろ、はい解決

176:デフォルトの名無しさん
20/09/10 13:41:25.58 Yq3PJL3D0.net
セルを弄くり回すとかじゃなくて配列のまま総舐めするなら1万行ぐらいすぐ終わるでしょう
指定した値aの近似値が欲しいなら
If a-x<=Array(i) And a+x>=Array(i) Then
とかで引っ掛かる奴を引っ張り出すなりなんなりすりゃあ良い

177:デフォルトの名無しさん
20/09/10 13:43:28.62 l+lun8zfM.net
あ、ごめん
俺が質問を勘違いしてたわ

178:デフォルトの名無しさん
20/09/10 13:48:20.19 Yq3PJL3D0.net
近似値の範囲が不定で最も近い値を探すって言うならRank関数とかLarge関数とかSmall関数使うのも手

179:デフォルトの名無しさん
20/09/10 13:50:34.65 l+lun8zfM.net
>>168
各オブジェクトに多数のイベントが設定されているでしょ
windowsのプログラミングはイベントドリブンが基本
ブックが開いた、ボタンが押された、マウスが動いたなどのイベントに対するコードを書いていけばアプリケーションが完成する


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1306日前に更新/123 KB
担当:undef