VBAなんでも質問スレ Part2 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
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/ 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
基礎的な質問で恐縮ですが、ご解説いただければ幸いです。
よろしくお願いします。 >>522
0も1回と数えるから、i が0の時に1回、1の時に1回、合計で2回です
For i = 1 To tmp
にすれば1回になるよ >>523
解説頂きましてありがとうございます。
0も1と数えるのはややこしいですね。。
しっかり復習します。 配列は0スタートとか知っておいたほうが良い(VBAの場合はOption Baseで切り替えられるけど) >>524
理屈で覚えればややこしくはないぞ。
配列の添字は距離のようなもので、「当該配列の1個目の要素のポインタを起点としたときに、そのポインタにどれだけ(何回)加算した場所に、その要素の格納されているメモリが存在するか」を示す数字。
1個目の要素から1個目の要素に移動するための加算回数=距離は0だから、1個目の要素にアクセスするときの添字は0になる。 >>514
if文でセルの指定範囲の時実行で1列目の時と2列目の時で分けたらどうですか? >>525
0スタートどころか-100スタートとかも可能 こればかりはプログラマーを混乱させるために導入されたとしか思えない謎仕様 >>531
配列添字の範囲指定なんてPascalの時代からあるのにバカって悲しいな w >>529
C#だとint[] intArray = new int[2]で要素は[0] と[1]になるんだが、
vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。Collectionは一から始まるが
Dictionaryは0からというのもたまに嵌る。 >>534
> vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。
0,1,2になるか1,2になるかはOption Baseによる
コンパイルエラーは意味わからんが
>>533
お前が黙っとけよ w ExcelのCellsの添え字が1オリジンだからデフォルトで使うしかない >>535
cell番地が1から始まるからbaseも1じゃなきゃ書けないバカはレス禁止 Cellsはコレクションオブジェクトを返すプロパティ関数だから、インデクサが1オリジンなのは文法上当たり前 >>540
配列の話してんだよバカチョン黙ってろや >>539
誰にレスしてんだよ、ボケ w
>>540
アホすぎ、そんなもん仕様によるだろ Excelが開発された当初はまだ0の発見前だったからだろ。
今作るなら0から始まるようになる。 こんばんは! おしえてください!
VBAでフリーフォームを書いたり、既にあるフリーフォームの頂点編集をしようとしています。
書く方は上手くいって、Shapes.BuildFreeformに、AddNodesコマンドで10点頂点を追加して、
楕円を書きました。
続いて、頂点の編集を行うべく、書かれたshapeのnodesや、Verticesで頂点情報を取得したら、
なぜか30点あります。ベジェ曲線で描かれた頂点の座標はもう残っていないのでしょうか?? こんにちは。
VBA初心者です。
Excelで知恵袋のような社内用のQ&Aを作成中です。
質問フォームに入力すると質問が縦に書き込まれていくところまで作りました。
しかし回答を質問に対応させることができません。
回答は対象の質問の横に入力されていくように作りたいですが、どうしたらよろしいでしょうか。
教えて下さい。
分かりづらいかもしれませんが、下記のように作りたいです。
質問1 回答1 回答2 回答3…
質問2 回答2-1 回答2-2…
質問3 シートを別にする
質問ごとにIDを振って回答にその質問IDを保持させる 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 ExcelVBAの質問です
adodbStreamを使って、jisコード(ISO-2022-JP)で書かれたテキストファイルを読み込んで色々するマクロを作っています
対象のテキストは1行120バイトのレコードが何行も含まれるという体裁になっているファイルです
このファイルを入力ファイルに指定したところ、なぜか3行目のみ最初の12バイト分が読み込まれません
レコードの内容を変えて何度か試してみたのですが、決まって3行目のみ行頭の12バイトが抜け落ちてしまいます
adodbを使う際に何か必要なことがあるのでしょうか? Webにあるスクリプト入れても動いたり動かなかったり
厳しいね、これは。 ファミコンゲームを再現したいんですが、単純な構造のゲームってありますか? シート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 >>556
Resizeで貼り付ける範囲を広げてあげる
幅を9セルにしたいならResize(, 9)って付け足す 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
HCSP8 シートにボタンがいくつかあって、押したときの処理が結構複雑なんです
とりあえずclickedをシートモジュールに書いて、そこから呼び出される関数も全部シートモジュールに書いたら分量がすごいことになりました
やっぱりクリック検出だけにしぼって残りは全部標準モジュールにすべきなんですかね。そのシートでしか呼び出されないわけで分けるのも分かりにくいような気もして >>563
Excel2003までのツールバーにメニュー追加するコードを書くと2007以降ではリボンにメニューが追加されるけど違う話かな? Access2016でコンボボックスの規定値をnullから1へ変更したくて
フォーム!コンボボックス.DefaultValue = """1"""とするフォーム上は1と表示されるんだが、プロパティーシート上は全く変化なくて、フォームをとじてから開くと規定値が変わっていなくてNullのまま。
VBAからは既定値の変更が出来ないのかな? フォームを閉じるときに変更を保存しなけりゃ普通に考えてもとに戻るわけだが ここはjscriptはアカンけ?outlookをjsで弄りたいんだが Wordで読みとり専用推奨で保存されてるファイルをVBAで書き込み可で開いて編集して上書き保存したいんですが、やる方法はありますか? マジだったカオスと思ったが
開くと読み取り専用か聞いてくるのか
まあ、OS側でなくワード側で制御してそうだから、回避は厳しそうな気がする カオス言いたい年頃なのでどうか大目に見てやって下さい カオスは天地が分かれる前の状態 あるいは光と闇が分かれる前の状態 >>576
VBAを使わずにファイルを開いてダイアログのウィンドウをつかまえて「いいえ」ボタンにメッセージを送るという力技ぐらいしか方法はないんでしょうか?
Excelでは開くときにIgnoreReadOnlyRecommenedというのを指定すれば良さそうなんですが document.openメソッドにも引数readonly があるみたいだけど >>581
ReadOnlyにFalseを渡しても読みとり専用で開かれるのは確認済みです >>574
ありません。
Wordは手動でやるしかない。
Excelとは違いますから。 >>580
VBAでもその力業で出来るけどね。
でも読み取り専用推奨で保存する目的はそのメッセージを出すことにあると思うからそれをスキップするコードを書くべきかという問題もある。 >>582
すくなくともうちの環境では、ReadOnly:=Falseで書き込み可能で開いてるけど?
その状態からReadOnlyRecommended = Falseにして保存したら、読み取り専用推奨は外れてるが
まあうちの環境がかなり古いから最近では出来ない可能性もあるが
それホントに推奨なだけなのか? >>586
じゃあ2010から出来なくなったんだな
うちの2007ではできてるから
ただそこの文書
Note The following example applies to Word 2003 and 2002:
とか書いてあるな
Last Updated: Apr 19, 2018
らしいけど、適用対象バージョンがよくわからんな ACCESSでオートルックアップクエリを使用したフォームでマスタにないものを入力した際、
フィールドとキーが一致しているレコードをテーブルで探すことができません。
と出ますが、マスタにないデータを入力しようとしたとき、上のメッセージを出すことなく、マスタ登録用フォームを呼び出すにはどうすればよいでしょうか?教えていただけると助かります。 スパークラインをVBAで挿入したいんだけど範囲指定のところがうまくいきません。
わかる方いたら教えてください。よろしくお願いします。
call cells(10 , h ).SparklineGroups.Add(xlSparkLine, "n5: n100")
"n5: n100" のところなのですが、
range(worksheets(h).cells(14,5) , worksheets(h).cells(14 , G ))
のようにして ワークシートごとの数値群をスパークラインにしていきたいのですが、、、
何か良い方法を教えてください。
よろしくお願いします。 質問
Outlook2010なのですが
受信トレイの検索(Ctrl+E)で「請求書」を検索するのと同じ動作を
VBAにしたいのですがどのように記述すればいいのでしょうか
ボタンに登録して使うつもりです。
OutlookVBAを使うのは初めてでしてお手引きをお願いいたします VBAで質問です
【前提】
・デスクトップにフォルダA
・フォルダAの中に9月1日分のExcelファイル"0901"とマクロ作動用の.xlsmファイル
【したいこと】
・フォルダAの中に9月2日分のフォルダ"0902"を作成
・"0901"を開き、B2セルの2018/9/1を2018/9/2に書き換え
・フォルダ"0902"内にファイル名を"0902"にして保存
日毎のレポートのひな形を作ろうとしています
あまり知らないながら書いてるのですがエラー出まくりで泣きそうです >>590
Application.Searchメソッド、もしくは
Application.Session.GetDefaultFolder(olFolderInbox).GetTable(DASLクエリの引数) を使えば良いのでは >>591
悪いこと言わないから、手でやるか詳しい人に頼みなさい
複数のブックが同時に開かれている状態でのVBA処理には
いろいろ面倒なところがあり、経験が必要
5ちゃんでサクっと説明できるものではない
しかもフォルダ処理も伴っているので、エラー処理を含め
きっちり作ろうとするとけっこうな規模のアプリになってしまうと思う >>591
thisworkbook.path\フォルダA\0901を開いてあとはブック名から指定して必要事項を書き換え。
ブック名を指定してsaveAsで
thisworkbook.path\フォルダA\0902で保存。
蛇足だが、必要無くともブックもシートも常に指定した方が良い。 >>591
とりあえず作ったコードを晒せば色々添削してもらえるかと
>>593
回答できないなら黙ってなよ おそらくやりたいことはこんな感じだろう。
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 >>592
Application.AdvancedSearchして
Searchオブジェクトを検索フォルダーにSaveするっていうことですかね
単純にVBAでCrtl+Eのクイックサーチ(?)する方法があればと思ったのですが
無理っぽいですね
ありがとうございました 初歩的な質問でごめんなさい
うまくできません
If IsNumeric(myN) Then
Range("A1").Value=Range("A1").Value + myN
End If
myNが1の時と2の時があるとしてセルA1の値を3にしたいのですが
やってみると12っていう風に数字が並んでいってしまいます
どうしたらいいでしょうか >>599
もしmyNがString型、あるいはObject型に文字列データが入っている場合は数値型に変換する必要がある
Range("A1").Value = Val(Range("A1").Value) + Val(myN)
でいいんじゃないかな >>600
String型になっていました
参考にしてもっと勉強します
お付き合いくださりありがとうございました 超初心者です。
Googleの検索窓に「VBA」と入力する サンプルコード
(https://vba-code.net/ie/set-value-to-textbox/) を実行してみましたが、
objIE.document.getElementById("gbqfq").Value = "VBA"のところで
「実行時エラー 424 オブジェクトが必要です。」となって動きません。
「標準モジュールに以下のコードを追加して」の意味が分からないので、
標準モジュールをどう書いたらよいのか、どこに追加したらよいのかわからず
サンプルコードのみを実行しました。
どなたか親切な方、対応方法を教えてください。
難しいことはわからないので具体的にコードを書いてもらえると嬉しいです。
よろしくお願いいたします。 >>602
>>objIE.document.getElementById("gbqfq").Value = "VBA"
objIE.Document.getElementById("lst-ib").Value = "VBA" >>603
ありがとうございます!
できました!!!
なんか分からないけど動いて嬉しいです!
頑張ります。 >>604
おう頑張れ!わからんかったらまたいつでも聞いてくれな! >>605
ありがとうございます!
同じことを別のホームページでしたくて、
URLと入力するところを変えてみたのですが、
実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていませんとなって動きません。
ホームページは
https://www2.smile-etc.jp/NASApp/etcmlg/MlgReq;jsessionid=0001kXELRCuGax2mjI7VtXa12rz:15fqn57ku?gvlddpef=1011100000&mdwsetmb=1011120000の画面でしたくて、
入力するところは
objIE.document.getElementsByName("Name1Kana").Value = "マイレージ"としてみました。
お時間あるときでよいので出来たらお願いします。
仕事で毎日同じような入力ばかりしていて自動化できるところをできたらいいなと思っているのですが、超初心者にはハードルが高くて難しいです 涙
' getElementById("gbqfq")
getElementById("lst-ib")
君は、この違いがわからないの?
HTML, DOM, CSS, JavaScript とか知らないの?
VBA には関係ないのだけど。
全言語・プログラミングに共通の話題なんだが HTML に書いてある、ID だよ
ウェブページは、HTML(DOM), CSS, JavaScript で出来ている。
ブラウザでF12 を押すと、開発者ツールが起動するだろ
これらを知らないと、ウェブ開発はできない!
VBA とは、全く関係ない >>609
>>609
知識もないのに場違いな質問をしてしまいすみませんでした。ご親切にありがとうございました。 >>606
自己解決して、自動入力マクロができました!ありがとうございました。 VBAでできることはC#でもやることはできますか? それにしても、なんで、マクロはFunctionしかcall出来ないんだろうね。
無駄にFunctionを作らないようにと英語の本には書いてある。Subで済むもをFunctionにするなと書いてある。
なのに、マクロの仕様のために、無駄にFunctionをつくったり、SubをcallするだけのFunctionを作ったりしないといけないのは間抜けな仕様だと思うがどうだろうか? >>614
それもC#で可能
>>615
ちょっと何言ってるかわかんないですね >>616
マクロからSubをCallできないのは知ってますか? >>617
知らないです
私の知ってるマクロだとsubもcallできるので >>616
本当に?
ワークシートからDLL関数をCallするためのインターフェースだけはVBAネイティブのFunctionとして書かなきゃいけないと思ってた
ワークシートから直接C#ソースの関数をCall出来るってこと?
>>615
SubもCall出来る
というかSubは本来Subroutineのことを指すのでそもそもCallできなきゃおかしい あれ?エクセルは出来るの?
アクセスは駄目なんだよ VBAしか使わない人間は、WinAPI使わない人間はSubしかCallしない。 ■ このスレッドは過去ログ倉庫に格納されています