X



VBAなんでも質問スレ Part2 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2015/05/21(木) 10:52:44.71ID:KLv0vQmm
VBAを使った質問ならなんでもござれ
本来の対象であるオフィスアプリを操作する以外の話もOK

ゲーム作り、Webアクセス、外部アプリの操作
COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど
VBAで実行するものであればなんでも質問してください

VBAを開発環境としていろいろ作っちゃいましょう

前スレ

VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/

関連スレ

Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/

Access VBA 質問スレ Part1
http://peace.2ch.net/test/read.cgi/tech/1328536426/

VBプログラマ質問スレ(Ver.6.0 まで) part64
http://peace.2ch.net/test/read.cgi/tech/1393069842/

Excel総合相談所 118 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/bsoft/1430352555/
0522デフォルトの名無しさん
垢版 |
2018/03/07(水) 08:26:06.09ID:tPOSTBDK
VBA初心者です。
省略可能なキーワードOptionalに関して質問がございます。
・質問内容
以下のコードにおいて、なぜ"ABC"が2回繰り返されるのでしょうか?
Optionalで指定した1が初期値としてtmpに格納され、For〜Nextステートメントの処理が0〜1となり、回答は”ABC”のみだと考えました。

・コード
Sub Sample1()

Call Sample2

End Sub

Sub Sample2(Optional tmp As Long = 1)

Dim i As Long
For i = 0 To tmp
Debug.Print "ABC"
Next i
End Sub

基礎的な質問で恐縮ですが、ご解説いただければ幸いです。
よろしくお願いします。
0523デフォルトの名無しさん
垢版 |
2018/03/07(水) 09:34:45.98ID:1c1zt9Ui
>>522
0も1回と数えるから、i が0の時に1回、1の時に1回、合計で2回です

For i = 1 To tmp
にすれば1回になるよ
0524デフォルトの名無しさん
垢版 |
2018/03/08(木) 09:50:20.87ID:kgkGNmtQ
>>523
解説頂きましてありがとうございます。
0も1と数えるのはややこしいですね。。
しっかり復習します。
0525デフォルトの名無しさん
垢版 |
2018/03/08(木) 17:16:49.20ID:1OkrDYdr
配列は0スタートとか知っておいたほうが良い(VBAの場合はOption Baseで切り替えられるけど)
0526デフォルトの名無しさん
垢版 |
2018/03/08(木) 18:23:37.87ID:bSaoLb8p
>>524
理屈で覚えればややこしくはないぞ。
配列の添字は距離のようなもので、「当該配列の1個目の要素のポインタを起点としたときに、そのポインタにどれだけ(何回)加算した場所に、その要素の格納されているメモリが存在するか」を示す数字。
1個目の要素から1個目の要素に移動するための加算回数=距離は0だから、1個目の要素にアクセスするときの添字は0になる。
0529デフォルトの名無しさん
垢版 |
2018/03/08(木) 21:40:28.86ID:Og1NJDFT
こればかりはプログラマーを混乱させるために導入されたとしか思えない謎仕様
0531デフォルトの名無しさん
垢版 |
2018/03/09(金) 19:02:04.18ID:M2r/B6Zk
>>530
お前はバカなんだからしゃべるな
0533デフォルトの名無しさん
垢版 |
2018/03/09(金) 19:47:08.42ID:M2r/B6Zk
>>532
あれ?発言を許可した覚えはないけど?
0534デフォルトの名無しさん
垢版 |
2018/03/10(土) 04:04:01.67ID:hJ8m/Sii
>>529
C#だとint[] intArray = new int[2]で要素は[0] と[1]になるんだが、
vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。Collectionは一から始まるが
Dictionaryは0からというのもたまに嵌る。
0535デフォルトの名無しさん
垢版 |
2018/03/10(土) 12:36:10.36ID:f+B2oLbA
>>534
> vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。
0,1,2になるか1,2になるかはOption Baseによる
コンパイルエラーは意味わからんが

>>533
お前が黙っとけよ w
0536デフォルトの名無しさん
垢版 |
2018/03/11(日) 13:41:16.21ID:1qbV0tMy
>>535
オマエも黙っとけハゲ
0539デフォルトの名無しさん
垢版 |
2018/03/11(日) 16:09:32.52ID:auu5o0Ru
>>535
cell番地が1から始まるからbaseも1じゃなきゃ書けないバカはレス禁止
0540デフォルトの名無しさん
垢版 |
2018/03/11(日) 16:12:01.55ID:ULAXnW5C
Cellsはコレクションオブジェクトを返すプロパティ関数だから、インデクサが1オリジンなのは文法上当たり前
0541デフォルトの名無しさん
垢版 |
2018/03/11(日) 16:16:16.76ID:auu5o0Ru
>>540
配列の話してんだよバカチョン黙ってろや
0543デフォルトの名無しさん
垢版 |
2018/03/11(日) 17:04:17.63ID:sEfAJdP7
Excelが開発された当初はまだ0の発見前だったからだろ。
今作るなら0から始まるようになる。
0544デフォルトの名無しさん
垢版 |
2018/03/11(日) 19:02:59.32ID:lvju0XX+
あーこれはスベったな
0545素人
垢版 |
2018/03/11(日) 22:39:56.16ID:/xAIuEgQ
こんばんは! おしえてください!
VBAでフリーフォームを書いたり、既にあるフリーフォームの頂点編集をしようとしています。
書く方は上手くいって、Shapes.BuildFreeformに、AddNodesコマンドで10点頂点を追加して、
楕円を書きました。

続いて、頂点の編集を行うべく、書かれたshapeのnodesや、Verticesで頂点情報を取得したら、
なぜか30点あります。ベジェ曲線で描かれた頂点の座標はもう残っていないのでしょうか??
0546デフォルトの名無しさん
垢版 |
2018/03/15(木) 07:48:53.70ID:O8Mn8lcP
>>545
コード貼ればレス付くかも
0547デフォルトの名無しさん
垢版 |
2018/03/24(土) 15:42:57.45ID:5WWUtLn7
こんにちは。
VBA初心者です。
Excelで知恵袋のような社内用のQ&Aを作成中です。
質問フォームに入力すると質問が縦に書き込まれていくところまで作りました。
しかし回答を質問に対応させることができません。
回答は対象の質問の横に入力されていくように作りたいですが、どうしたらよろしいでしょうか。
教えて下さい。

分かりづらいかもしれませんが、下記のように作りたいです。

質問1 回答1 回答2 回答3…
質問2 回答2-1 回答2-2…
質問3
0550デフォルトの名無しさん
垢版 |
2018/04/26(木) 06:16:16.15ID:5eP/vpMI
htmlからidやnameに属さない、独自の名前を付けられた値を取得したいです。
<li id="result_1" result-rank="1" data-original="hoge">
<li id="result_2" result-rank="2" data-original="fuga">
・・・
<li id="result_123" result-rank="123" data-original="hage">

data-original="hoge"の「hoge」を取得したいです。
常にidのresult_1を取得したいわけではなく、またidの値も検索結果によっては変動します。
data-originalは必ずliタグの中にあります。
htmlは変更できません。

ウィザード級の方々何卒お力をお貸しくださいませ。m(_ _)m
0551550
垢版 |
2018/04/27(金) 04:34:25.39ID:HRYENVs1
自己解決しました。
0552デフォルトの名無しさん
垢版 |
2018/04/27(金) 17:39:47.51ID:Ewgb7+aM
ExcelVBAの質問です
adodbStreamを使って、jisコード(ISO-2022-JP)で書かれたテキストファイルを読み込んで色々するマクロを作っています
対象のテキストは1行120バイトのレコードが何行も含まれるという体裁になっているファイルです
このファイルを入力ファイルに指定したところ、なぜか3行目のみ最初の12バイト分が読み込まれません
レコードの内容を変えて何度か試してみたのですが、決まって3行目のみ行頭の12バイトが抜け落ちてしまいます
adodbを使う際に何か必要なことがあるのでしょうか?
0553デフォルトの名無しさん
垢版 |
2018/04/27(金) 17:40:39.83ID:Ewgb7+aM
上げておきます
0554デフォルトの名無しさん
垢版 |
2018/05/07(月) 00:53:53.60ID:Zjii9/TV
Webにあるスクリプト入れても動いたり動かなかったり
厳しいね、これは。
0555デフォルトの名無しさん
垢版 |
2018/05/11(金) 11:32:55.94ID:Vbz54Hwk
ファミコンゲームを再現したいんですが、単純な構造のゲームってありますか?
0556デフォルトの名無しさん
垢版 |
2018/05/11(金) 12:17:07.84ID:Pz/tQeeR
シート1のA44:I44のセルの内容を、マクロでシート2の最後列に貼り付けていきたいです。
下記のマクロだと、シート1のA44のセルをシート2の最後列のAのセルにのみ、コピーするだけになってしまいます。
どう変更すればいいのか、よかったら教えて頂きたいです。
よろしくお願いします。

Sub テスト()
Dim LastRow As Long
With Worksheets("シート2")
LastRow = Worksheets("シート2").Range("A"&Rows.Count).End(xlUp).Row + 1
Range("A"&LastRow).Value=Worksheets("シート1").Range("A44:I44").Value
End With
End Sub
0559デフォルトの名無しさん
垢版 |
2018/05/23(水) 19:25:31.94ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

HCSP8
0561デフォルトの名無しさん
垢版 |
2018/05/30(水) 16:34:41.89ID:C5TotkC4
VBAってリボンにメニューを作成出来る?
0563デフォルトの名無しさん
垢版 |
2018/05/31(木) 22:00:54.69ID:mTNxmz5w
出来ないだろ
0564デフォルトの名無しさん
垢版 |
2018/05/31(木) 22:10:43.12ID:tlOTml64
シートにボタンがいくつかあって、押したときの処理が結構複雑なんです
とりあえずclickedをシートモジュールに書いて、そこから呼び出される関数も全部シートモジュールに書いたら分量がすごいことになりました
やっぱりクリック検出だけにしぼって残りは全部標準モジュールにすべきなんですかね。そのシートでしか呼び出されないわけで分けるのも分かりにくいような気もして
0565デフォルトの名無しさん
垢版 |
2018/05/31(木) 23:13:50.53ID:eZ3BghFT
>>563
Excel2003までのツールバーにメニュー追加するコードを書くと2007以降ではリボンにメニューが追加されるけど違う話かな?
0566デフォルトの名無しさん
垢版 |
2018/07/02(月) 19:23:11.48ID:kZ0RH16R
Access2016でコンボボックスの規定値をnullから1へ変更したくて
フォーム!コンボボックス.DefaultValue = """1"""とするフォーム上は1と表示されるんだが、プロパティーシート上は全く変化なくて、フォームをとじてから開くと規定値が変わっていなくてNullのまま。
VBAからは既定値の変更が出来ないのかな?
0567デフォルトの名無しさん
垢版 |
2018/07/04(水) 18:36:07.99ID:uOrTSuCX
フォームを閉じるときに変更を保存しなけりゃ普通に考えてもとに戻るわけだが
0569デフォルトの名無しさん
垢版 |
2018/07/04(水) 22:40:17.29ID:gFgZc5FG
5OK
0574デフォルトの名無しさん
垢版 |
2018/08/01(水) 19:27:32.96ID:sloNm1e3
Wordで読みとり専用推奨で保存されてるファイルをVBAで書き込み可で開いて編集して上書き保存したいんですが、やる方法はありますか?
0576デフォルトの名無しさん
垢版 |
2018/08/01(水) 22:05:26.28ID:oaZVWoyy
マジだったカオスと思ったが
開くと読み取り専用か聞いてくるのか

まあ、OS側でなくワード側で制御してそうだから、回避は厳しそうな気がする
0580デフォルトの名無しさん
垢版 |
2018/08/02(木) 00:14:28.59ID:isxfR7GW
>>576
VBAを使わずにファイルを開いてダイアログのウィンドウをつかまえて「いいえ」ボタンにメッセージを送るという力技ぐらいしか方法はないんでしょうか?

Excelでは開くときにIgnoreReadOnlyRecommenedというのを指定すれば良さそうなんですが
0583デフォルトの名無しさん
垢版 |
2018/08/02(木) 12:49:47.07ID:rM6odxjs
>>574
ありません。
Wordは手動でやるしかない。
Excelとは違いますから。
0584デフォルトの名無しさん
垢版 |
2018/08/02(木) 18:55:35.87ID:kRv3+o5C
>>580
VBAでもその力業で出来るけどね。
でも読み取り専用推奨で保存する目的はそのメッセージを出すことにあると思うからそれをスキップするコードを書くべきかという問題もある。
0585デフォルトの名無しさん
垢版 |
2018/08/02(木) 19:38:51.82ID:CFW8XzdE
>>582
すくなくともうちの環境では、ReadOnly:=Falseで書き込み可能で開いてるけど?
その状態からReadOnlyRecommended = Falseにして保存したら、読み取り専用推奨は外れてるが

まあうちの環境がかなり古いから最近では出来ない可能性もあるが
それホントに推奨なだけなのか?
0587デフォルトの名無しさん
垢版 |
2018/08/02(木) 21:07:22.34ID:CFW8XzdE
>>586
じゃあ2010から出来なくなったんだな
うちの2007ではできてるから

ただそこの文書
Note The following example applies to Word 2003 and 2002:
とか書いてあるな
Last Updated: Apr 19, 2018
らしいけど、適用対象バージョンがよくわからんな
0588デフォルトの名無しさん
垢版 |
2018/08/08(水) 01:24:38.39ID:vu1bVHsA
ACCESSでオートルックアップクエリを使用したフォームでマスタにないものを入力した際、
フィールドとキーが一致しているレコードをテーブルで探すことができません。
と出ますが、マスタにないデータを入力しようとしたとき、上のメッセージを出すことなく、マスタ登録用フォームを呼び出すにはどうすればよいでしょうか?教えていただけると助かります。
0589デフォルトの名無しさん
垢版 |
2018/08/22(水) 19:57:58.33ID:I61xiysx
スパークラインをVBAで挿入したいんだけど範囲指定のところがうまくいきません。
わかる方いたら教えてください。よろしくお願いします。

call cells(10 , h ).SparklineGroups.Add(xlSparkLine, "n5: n100")

"n5: n100" のところなのですが、 
range(worksheets(h).cells(14,5) , worksheets(h).cells(14 , G ))

のようにして ワークシートごとの数値群をスパークラインにしていきたいのですが、、、
何か良い方法を教えてください。
よろしくお願いします。
0590デフォルトの名無しさん
垢版 |
2018/09/02(日) 12:36:29.88ID:/2qGDDvp
質問 
Outlook2010なのですが
受信トレイの検索(Ctrl+E)で「請求書」を検索するのと同じ動作を
VBAにしたいのですがどのように記述すればいいのでしょうか
ボタンに登録して使うつもりです。

OutlookVBAを使うのは初めてでしてお手引きをお願いいたします
0591デフォルトの名無しさん
垢版 |
2018/09/02(日) 16:03:58.04ID:v7+8Ol2A
VBAで質問です
【前提】
・デスクトップにフォルダA
・フォルダAの中に9月1日分のExcelファイル"0901"とマクロ作動用の.xlsmファイル

【したいこと】
・フォルダAの中に9月2日分のフォルダ"0902"を作成
・"0901"を開き、B2セルの2018/9/1を2018/9/2に書き換え
・フォルダ"0902"内にファイル名を"0902"にして保存 


日毎のレポートのひな形を作ろうとしています
あまり知らないながら書いてるのですがエラー出まくりで泣きそうです
0592デフォルトの名無しさん
垢版 |
2018/09/02(日) 16:16:35.28ID:7fXcCHFS
>>590
Application.Searchメソッド、もしくは
Application.Session.GetDefaultFolder(olFolderInbox).GetTable(DASLクエリの引数) を使えば良いのでは
0593デフォルトの名無しさん
垢版 |
2018/09/02(日) 16:51:32.22ID:Q0JGCJ3q
>>591
悪いこと言わないから、手でやるか詳しい人に頼みなさい
複数のブックが同時に開かれている状態でのVBA処理には
いろいろ面倒なところがあり、経験が必要
5ちゃんでサクっと説明できるものではない
しかもフォルダ処理も伴っているので、エラー処理を含め
きっちり作ろうとするとけっこうな規模のアプリになってしまうと思う
0594デフォルトの名無しさん
垢版 |
2018/09/02(日) 17:27:55.14ID:1l6OdzeH
>>591
thisworkbook.path\フォルダA\0901を開いてあとはブック名から指定して必要事項を書き換え。
ブック名を指定してsaveAsで
thisworkbook.path\フォルダA\0902で保存。


蛇足だが、必要無くともブックもシートも常に指定した方が良い。
0596デフォルトの名無しさん
垢版 |
2018/09/02(日) 18:16:50.42ID:dkuRxOF+
おそらくやりたいことはこんな感じだろう。
0901ファイルを開いた状態で、9月2日当日にレポートを作成する前提。
0901ファイルを修正するという話だったからその通りにしたけど、本当ならここはテンプレートファイルから書き起こすようにするべきだと思う。
テスト実行してないので、エラーが出たらごめんなさい。

Sub CreateDailyReport

Dim Report As Workbook
Set Report = Application.Workbooks("0901")
'テンプレートから新規ファイルを作成するなら以下のように変える
'Set Report = Application.Workbooks.Open(テンプレートのパス)

Report.Worksheets("Sheet1").Range("B2").Value = Format(Date, "yyyy/mm/dd")

Dim PathString As String
PathString = Thisworkbook.Path & "¥" & Format(Date, "mmdd")

If Dir(PathString, vbDirectory) = "" Then MkDir PathString

Report.SaveAs PathString & "¥" & Format(Date, "mmdd") & ".xlsx"

Report.Close

End Sub
0598デフォルトの名無しさん
垢版 |
2018/09/02(日) 21:02:04.61ID:/2qGDDvp
>>592
Application.AdvancedSearchして
Searchオブジェクトを検索フォルダーにSaveするっていうことですかね

単純にVBAでCrtl+Eのクイックサーチ(?)する方法があればと思ったのですが
無理っぽいですね
ありがとうございました
0599デフォルトの名無しさん
垢版 |
2018/09/06(木) 16:40:58.45ID:KlP6yXrE
初歩的な質問でごめんなさい
うまくできません

If IsNumeric(myN) Then
Range("A1").Value=Range("A1").Value + myN

End If

myNが1の時と2の時があるとしてセルA1の値を3にしたいのですが
やってみると12っていう風に数字が並んでいってしまいます
どうしたらいいでしょうか
0600デフォルトの名無しさん
垢版 |
2018/09/06(木) 19:12:55.41ID:iNH/PWkM
>>599
もしmyNがString型、あるいはObject型に文字列データが入っている場合は数値型に変換する必要がある
Range("A1").Value = Val(Range("A1").Value) + Val(myN)
でいいんじゃないかな
0601デフォルトの名無しさん
垢版 |
2018/09/06(木) 19:23:08.77ID:KlP6yXrE
>>600
String型になっていました
参考にしてもっと勉強します
お付き合いくださりありがとうございました
0602デフォルトの名無しさん
垢版 |
2018/09/21(金) 21:15:16.71ID:Fm9zyYJ3
超初心者です。

Googleの検索窓に「VBA」と入力する サンプルコード
https://vba-code.net/ie/set-value-to-textbox/) を実行してみましたが、
objIE.document.getElementById("gbqfq").Value = "VBA"のところで
「実行時エラー 424 オブジェクトが必要です。」となって動きません。

「標準モジュールに以下のコードを追加して」の意味が分からないので、
標準モジュールをどう書いたらよいのか、どこに追加したらよいのかわからず
サンプルコードのみを実行しました。

どなたか親切な方、対応方法を教えてください。
難しいことはわからないので具体的にコードを書いてもらえると嬉しいです。
よろしくお願いいたします。
0604デフォルトの名無しさん
垢版 |
2018/09/21(金) 22:40:18.36ID:Fm9zyYJ3
>>603
ありがとうございます!
できました!!!
なんか分からないけど動いて嬉しいです!
頑張ります。
0605デフォルトの名無しさん
垢版 |
2018/09/21(金) 22:42:58.72ID:MqKbhYRD
>>604
おう頑張れ!わからんかったらまたいつでも聞いてくれな!
0606デフォルトの名無しさん
垢版 |
2018/09/21(金) 23:16:58.27ID:Fm9zyYJ3
>>605
ありがとうございます!

同じことを別のホームページでしたくて、
URLと入力するところを変えてみたのですが、
実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていませんとなって動きません。
ホームページは

https://www2.smile-etc.jp/NASApp/etcmlg/MlgReq;jsessionid=0001kXELRCuGax2mjI7VtXa12rz:15fqn57ku?gvlddpef=1011100000&mdwsetmb=1011120000の画面でしたくて、


入力するところは
objIE.document.getElementsByName("Name1Kana").Value = "マイレージ"としてみました。

お時間あるときでよいので出来たらお願いします。

仕事で毎日同じような入力ばかりしていて自動化できるところをできたらいいなと思っているのですが、超初心者にはハードルが高くて難しいです 涙

'
0607デフォルトの名無しさん
垢版 |
2018/09/21(金) 23:29:19.39ID:m8DL5ZJ4
getElementById("gbqfq")
getElementById("lst-ib")

君は、この違いがわからないの?
HTML, DOM, CSS, JavaScript とか知らないの?

VBA には関係ないのだけど。
全言語・プログラミングに共通の話題なんだが
0608デフォルトの名無しさん
垢版 |
2018/09/21(金) 23:59:36.29ID:Fm9zyYJ3
>>607
すみません、わかりません。
0609607
垢版 |
2018/09/22(土) 01:01:33.83ID:DCTpeoPT
HTML に書いてある、ID だよ

ウェブページは、HTML(DOM), CSS, JavaScript で出来ている。
ブラウザでF12 を押すと、開発者ツールが起動するだろ

これらを知らないと、ウェブ開発はできない!

VBA とは、全く関係ない
0610デフォルトの名無しさん
垢版 |
2018/09/22(土) 03:52:07.76ID:AiTHsE5Z
>>609
>>609
知識もないのに場違いな質問をしてしまいすみませんでした。ご親切にありがとうございました。
0611デフォルトの名無しさん
垢版 |
2018/09/22(土) 09:42:45.32ID:AiTHsE5Z
>>606
自己解決して、自動入力マクロができました!ありがとうございました。
0615デフォルトの名無しさん
垢版 |
2018/10/12(金) 09:54:55.01ID:TjU2aakC
それにしても、なんで、マクロはFunctionしかcall出来ないんだろうね。
無駄にFunctionを作らないようにと英語の本には書いてある。Subで済むもをFunctionにするなと書いてある。
なのに、マクロの仕様のために、無駄にFunctionをつくったり、SubをcallするだけのFunctionを作ったりしないといけないのは間抜けな仕様だと思うがどうだろうか?
0619デフォルトの名無しさん
垢版 |
2018/10/12(金) 12:28:42.41ID:YStpcFYj
>>616
本当に?
ワークシートからDLL関数をCallするためのインターフェースだけはVBAネイティブのFunctionとして書かなきゃいけないと思ってた
ワークシートから直接C#ソースの関数をCall出来るってこと?

>>615
SubもCall出来る
というかSubは本来Subroutineのことを指すのでそもそもCallできなきゃおかしい
0621デフォルトの名無しさん
垢版 |
2018/10/12(金) 17:15:46.40ID:QO2uhWCP
VBAしか使わない人間は、WinAPI使わない人間はSubしかCallしない。
■ このスレッドは過去ログ倉庫に格納されています

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