Excel VBA 質問スレ P ..
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のプログラミングはイベントドリブンが基本
ブックが開いた、ボタンが押された、マウスが動いたなどのイベントに対するコードを書いていけばアプリケーションが完成する
180:デフォルトの名無しさん (ワッチョイ 3dad-sCec)
20/09/10 18:35:00 VdzBOqiR0.net
すみません今宿題でこれやってるんですけど打ち込んでもなにも出ないのですがなぜでしょう
181:デフォルトの名無しさん (ワッチョイ 3dad-sCec)
20/09/10 18:36:01 VdzBOqiR0.net
URLリンク(i.imgur.com)
これです
182:デフォルトの名無しさん (ワッチョイ 6a42-vvkI)
20/09/10 19:09:29 yo745YZ80.net
打ち込んだだけで実行してないからじゃね
183:デフォルトの名無しさん
20/09/10 19:30:20.82 L0+T18/AM.net
どこに打ち込んだかも分からないしなんとも
184:デフォルトの名無しさん
20/09/10 19:46:53.46 cO3BfNoWM.net
汚えコードだな
185:デフォルトの名無しさん
20/09/10 19:55:23.47 T9YJeJvx0.net
>>166
コードが汚すぎる
186:デフォルトの名無しさん (ワッチョイ 11da-pVuC)
20/09/10 20:10:09 QatXFD490.net
>>181
セルの幅や高さは初期状態?
187:デフォルトの名無しさん (ワッチョイ 11da-pVuC)
20/09/10 20:12:24 QatXFD490.net
あ、なんでもない
188:デフォルトの名無しさん (ワッチョイ 11da-pVuC)
20/09/10 20:17:20 QatXFD490.net
普通に動いたんで入力ミスとか環境の問題かな
189:デフォルトの名無しさん
20/09/10 20:49:46.36 Rp5mNNXSd.net
パズルゲームを作ってます。
セルを奇数列から横2マス選択してドラッグさした場合に、移動先が同じ奇数列から始まる場所なら許可。偶数列から始まる場所に移動した場合は不可にして移動をキャンセルさせたいんですがどうしたら出来ますか?良いEVENTってあるんですかね?
190:デフォルトの名無しさん
20/09/10 21:52:44.31 WalExY5Hd.net
>>180
そのまま入力してちゃんと動いたから、問題文には間違いはない
URLリンク(i.imgur.com)
それにしても学校の宿題だとしたらひどすぎるな
先生がこんなに汚いコードしか書けないとか生徒がかわいそう
191:デフォルトの名無しさん
20/09/10 21:54:41.31 WalExY5Hd.net
ああ最後の方に入力ミスあったわごめん
192:デフォルトの名無しさん
20/09/10 21:56:12.36 WalExY5Hd.net
>>189
SelectionChange
193:デフォルトの名無しさん
20/09/10 21:56:18.66 a+RPoaYl0.net
>>181
コメント行の終わりにシングルクォーテーションが付いているのは初めて見たw
コメントというより、文字列リテラルに見えてくるw
194:デフォルトの名無しさん
20/09/10 21:57:24.01 b8lNN7jK0.net
>>190
こんな意図がこんなに読みづらいコード初めて見たわ
195:デフォルトの名無しさん
20/09/10 22:01:54.82 qPrgFXQ2a.net
>>181
先生変数宣言しないの?
196:デフォルトの名無しさん
20/09/10 22:06:42.97 YMu2GFxia.net
教師は必ずしもコード書いてた人じゃないししゃあないんちゃう
197:デフォルトの名無しさん
20/09/10 22:22:10.32 6Lj7sAI40.net
>>180
馬鹿過ぎる帰れ
198:デフォルトの名無しさん
20/09/10 22:28:05.12 WalExY5Hd.net
>>193
HTMLみたいにコメントが改行で終わるとは限らない言語はまれによくあるけどな
それよりもインデントの汚さと、Cellsのパラメータにx, yを使ってるあたりがめちゃくちゃ気になる
199:デフォルトの名無しさん
20/09/10 22:28:20.02 QatXFD490.net
Kirakira1 のコードにそっくりなのが検索で見るかるけど
そっちでは変数宣言しているw
200:デフォルトの名無しさん
20/09/10 22:31:17.53 /qwml5cpa.net
これか
URLリンク(my-tax-nology.com)
>>マクロ(Excel VBA)を使えば、簡単なアニメーションを作ることができます。
>>アニメーションを作っていると楽しいだけでなく、プログラミングのスキルアップに繋がります。
なるほど??
201:デフォルトの名無しさん
20/09/10 22:37:08.36 uWh6vQvPa.net
エクセルVBA は当分なくならないですかね
202:デフォルトの名無しさん
20/09/10 22:43:44.96 WalExY5Hd.net
>>200
VBAを教えてるサイトでコメントをシングルクォートで閉じたりカッコを全角で書くやつなんて世界に一人しかいない
本人ならDimやインデントはちゃんと書くはずだし、完全にパクリだな
203:デフォルトの名無しさん
20/09/10 22:59:03.63 VdzBOqiR0.net
180ですなんとかできました。ド素人なんで申し訳ない
このコードはそんなできのいいものじゃないんですか?
先生凄く威圧的でいつもそんなんもわからんのかみたいな喋り方なんすけど
204:デフォルトの名無しさん
20/09/10 23:10:15.32 8/CQSYne0.net
すまん
wsfやhtaでvbs書くとき 'コメント' って書くわ
エディタの色付けがjs用だから
205:デフォルトの名無しさん
20/09/10 23:26:05.51 8/CQSYne0.net
>>203
「なんで乱数を整数化するのにRoundを使ってしまったんですか?」って聞いてみて
206:デフォルトの名無しさん
20/09/10 23:27:44.84 a+RPoaYl0.net
他の言語でも行コメントで見出し風にするプロはそれなりにいる。
ただ、初心者に教える人間が行コメント構文を、ブロックコメント構文と同じ使い方をするのは、初心者を混乱させるだけで、何のメリットもない。
207:デフォルトの名無しさん
20/09/10 23:29:02.40 b8lNN7jK0.net
>>203
なんで変数宣言しないんですか?
なんでx1とかわかりづらい命名するんですか?
なんでx1とかを上書きするようなわかりづらい変数の使い方してるんですか?
インデントの使い方に意図はありますか?
6の意味が説明されないとわからないのは不親切ですね
などなど…色々質問してみたらいいよ
208:デフォルトの名無しさん
20/09/10 23:31:52.10 ewRWdYKCd.net
>>203
その先生は、少なくともVBAの知識だけは大したことないことは誰が見てもわかる
ほかの言語のエキスパートでVBAをバカにする人もいるけど、人に教えるんならちゃんとしろと思う
>>199
よく見つけたな
209:デフォルトの名無しさん
20/09/10 23:31:53.48 a+RPoaYl0.net
>>205
それもなんか見ると気になるな。コードの順番も変だし、数値の精度やデータ型をわざとヘンテコにしているのかも謎。
210:デフォルトの名無しさん
20/09/10 23:33:45.89 ATM2a6JOd.net
>>205
Rndの定義から考えればIntを使うのが自然だけど、まあそこは100%間違いとは言い切れないからなあ
211:デフォルトの名無しさん
20/09/10 23:33:50.53 a+RPoaYl0.net
その先生だと6は数値ではなく数字です!
マジックナンバーって何と言いそうw
212:デフォルトの名無しさん
20/09/10 23:34:53.46 ATM2a6JOd.net
コードのおかしさは、その先生よりコピペ元のサイトの責任だろ
213:デフォルトの名無しさん
20/09/10 23:37:35.65 8/CQSYne0.net
>>212
ドコモロは黙っててくれないか
214:デフォルトの名無しさん
20/09/10 23:43:13.95 b8lNN7jK0.net
>>212
教える側の立場として教材として使うかどうか判断したんだから元のところに責任はねーだろ
なんか改悪もしてるし
215:デフォルトの名無しさん
20/09/10 23:50:48.35 Q3JELDTy0.net
ループの外でウエイトしてたら速すぎてキラキラしないんじゃ…。
紙に書いてある方。
216:デフォルトの名無しさん
20/09/10 23:52:06.33 2cDIJpauM.net
>>200
こいつもかなり怪しいな
i, jを宣言してないし、変数をゼロクリアしてるのも謎
217:デフォルトの名無しさん
20/09/10 23:53:08.37 /1fuNzSOa.net
>>215
確かに言われてみれば
キラキラの意味
218:デフォルトの名無しさん (ワッチョイ a95f-Sism)
20/09/11 01:20:18 66INGyZB0.net
>>216
本業が税理士なのに、詳しくもないことをひけらかすやつだから、税理士としてもいまひとつの癖のあるやつだと思う。
219:デフォルトの名無しさん (ワッチョイ a95f-Sism)
20/09/11 01:22:28 66INGyZB0.net
>>216 彼も他人のパクリなのかもね
220:デフォルトの名無しさん (ワントンキン MM7a-nV8z)
20/09/11 01:27:34 iTcJm+RBM.net
ゆとり世代の馬鹿に教えるゆとりかよ
221:デフォルトの名無しさん
20/09/11 08:33:42.89 L6SxevYWd.net
>>146
そいつはバグだと思うよ。
Mougで質問してた人がいて、俺も試したけどTreeViewでのD&Dで座標がバグってる。
で、15ってのはそのバグを何とか実情に合わせたものだと思う。
俺もその時似たようなことやって15っていう数字には覚えがある。
222:デフォルトの名無しさん
20/09/11 09:37:00.89 mn04Qg6+M.net
>>221
>>146 です。色々調べた結果、TreeViewのMouseMoveやMouseDownのイベントで渡される座標が他のフォームとは異なりピクセルで渡される事が原因でした。
なのでGetDesktopWindow,GetDC,GetDeviceCapを用いてDPIを取得し、
取得した値で1440(1440twips=1Inch)を割り、
その値をピクセル数に掛ける事でポイントでの換算に成功しました。
標準の設定ですとDPIが96になるそうなので1440/96で15、となるようです。
223:デフォルトの名無しさん
20/09/11 16:13:39.65 qEgHhc430.net
VB6だとScreen.TwipsPerPixelXってあったんだがなあ
VBAだとPointsToScreenPixelsXとかあるなと思ってみてみたけど、これ、つねに72DPIで計算するっぽいな
224:デフォルトの名無しさん
20/09/11 18:44:31.89 +9zmYtvxd.net
>>192
それだと1回めの選択範囲で動いて、移動したら動きますよね?
1回目の行や列を記憶させて2回目で比較する感じですか?
225:デフォルトの名無しさん
20/09/11 22:11:41.98 L6SxevYWd.net
>>222
>>223
うん、その辺みんな知ってるけどTreeViewの問題って違ってたと思うんだが。
226:デフォルトの名無しさん
20/09/12 08:12:41.83 cGm6fMBf0.net
動的配列に値を追加していきたいのですが要素番号を0ではなく1から始める方法はありませんか?
227:デフォルトの名無しさん
20/09/12 08:24:59.90 OyGZa+nz0.net
Sub testtttt()
Dim arr() As Variant
ReDim arr(1 To 1)
arr(1) = 10
ReDim Preserve arr(1 To 2)
arr(2) = 20
ReDim Preserve arr(1 To 3)
arr(3) = 30
MsgBox arr(1) & " " & arr(2) & " " & arr(3)
End Sub
ちょっとはぐぐれよな
URLリンク(www.relief.jp)
228:デフォルトの名無しさん
20/09/12 08:28:00.30 FkIM4E0+M.net
『[ VBA ]「Option Base 1」使うなよな!反論は聞かない!』
229:デフォルトの名無しさん
20/09/12 15:06:14.92 X8G1U5XY0.net
アレイリスト使うほうがかんたんじゃね?
230:デフォルトの名無しさん
20/09/12 20:26:44.99 +6u/uPRn0.net
先頭を1にするのはセンスないね
231:デフォルトの名無しさん
20/09/14 18:06:26.03 YLQY1Qz5r.net
i++とか+=使えないのマジで不便だな
前置インクリメントもできないし一行でもend ifとかloop書かなきゃいかんしめんどくさくね?
この言語もうちょい進化しないの?
232:デフォルトの名無しさん
20/09/14 18:10:50.73 CnoY9xmOM.net
1行でEnd If書きたくないならThenの後に半角スペースいれたら改行しないで処理書いてみ
++とかは禿同
233:デフォルトの名無しさん
20/09/14 18:13:56.53 YLQY1Qz5r.net
>>232
おおこんなことが、、、
ありがとう!
234:デフォルトの名無しさん
20/09/14 18:15:50.60 LbAMjRkX0.net
>>231
馬鹿は死ねよ
235:デフォルトの名無しさん
20/09/14 19:51:50.83 ZpzZ2vr50.net
ガイジ君ブチ切れw
236:デフォルトの名無しさん
20/09/14 19:57:09.34 lPVfhwtb0.net
ざわ・・ざわ・・
237:デフォルトの名無しさん
20/09/14 20:46:20.36 LbAMjRkX0.net
+=使えるだろうが
238:デフォルトの名無しさん
20/09/14 20:54:32.80 P2Bbq2Qk0.net
使えません
239:デフォルトの名無しさん
20/09/14 20:56:59.34 LbAMjRkX0.net
あー、VB.Netスレだと思ってた。スマン、死んでくる。
240:デフォルトの名無しさん
20/09/14 21:01:00.11 P2Bbq2Qk0.net
逝かないで
241:デフォルトの名無しさん
20/09/14 21:01:06.64 K/D9SivKp.net
制御構造は、キーワードの選び方がやや独特だけど、基本的なものについては、概ね他の言語と同等のことはできると思う。
どちらかというと、変数の宣言・定義が一緒にできないとか、配列・コレクションの要素参照が角括弧でなく丸括弧だとか、プロシージャ呼び出しの丸括弧の要否とかの方が不便さを感じるかな。まぁ、これらも慣れと言われればそれまでだが。
242:デフォルトの名無しさん
20/09/14 22:06:22.62 9LhT2bwK0.net
gotoとラベルでできるっちゃあできるけどcontinueとbreakが欲しい
243:デフォルトの名無しさん
20/09/14 22:20:37.59 8aASiVNY0.net
breakは、一応Exit 〜が概ね対応しているのでは(While〜Wendでは使えないけど)?
脱出するループを明示的に指定するので、breakより便利な場合もごくたまにある。もっとも、二重のForループから抜ける場合などは結局GoToに頼ることになるので中途半端ではあるけど。
244:デフォルトの名無しさん
20/09/14 23:27:12.72 EMg7ooaX0.net
俺もたまにラベルでcontinueするけどめちゃくちゃ見栄え悪くて嫌
245:デフォルトの名無しさん
20/09/15 08:35:58.25 Ny+/GOwEd.net
>>232
>>233
基本、それは使わないな。
読みやすさとか構造の分かり易さ優先。
勿論、時と場合による。
246:デフォルトの名無しさん
20/09/15 09:16:48.30 Ty4jOAMY0.net
ユーザーフォームの2つリストボックスで選択された値を変数に代入する方法を教えてください
■Module1
Public str As String
■ThisWorkbook
Sub tes1()
UserForm1.Show vbModeless
Range("A1").Value = str
End Sub
Sub tes2()
Range("A2").Value = str
End Sub
247:デフォルトの名無しさん
20/09/15 09:17:03.49 Ty4jOAMY0.net
■UserForm1
Private Sub UserForm_Initialize()
Dim r As Long
For r = Year(Date) - 1 To Year(Date) + 2
UserForm1.ListBox1.AddItem r & "年"
Next r
For r = 1 To 12
UserForm1.ListBox2.AddItem r & "月"
Next r
UserForm1.Show vbModeless
End Sub
Private Sub OKbtn_Click()
str = Replace(UserForm1.ListBox1.Text, "年", "") & "_" & Replace(UserForm1.ListBox2.Text, "月", "")
Unload UserForm1
End Sub
テストで変数strをA1・A2に入れたいのですが、この方法だとどちらも入りません。
248:デフォルトの名無しさん
20/09/15 09:33:07.65 q5KWnXWXM.net
ボタン押してstrに代入するところModule1.strじゃないとダメなんじゃないの
249:246
20/09/15 09:45:50.10 Ty4jOAMY0.net
>>248
試しましたがだめでした
追記
ブックを開いたまま、tes1を2回目に実行するとA1には書き込みますが、
ブックを開いて、1回目のtes1実行ではA1には書き込まれないようです。
250:デフォルトの名無しさん
20/09/15 09:57:04.92 q5KWnXWXM.net
モードレスだから
ボタン押した時にUnload UserForm1する前にModule1.tes2を呼び出さないとだ
Sub tes1()
UserForm1.Show vbModeless
End Sub
Sub tes2()
Range("A1").Value = str
Range("A2").Value = str
End Sub
251:246
20/09/15 11:27:58.65 Ty4jOAMY0.net
>>250
ありがとうございました。解決しました
252:デフォルトの名無しさん
20/09/15 18:56:31.81 Nzz3069/0.net
AccessVBAを使用しているのですが、標準モジュールを変数に格納する方法がわかりません。
フォームコントロールの様に変数に入れて扱う方法はありませんでしょうか。
253:デフォルトの名無しさん
20/09/15 19:29:57.34 pZ4d9dfu0.net
ありません
254:デフォルトの名無しさん
20/09/16 00:02:05.57 chmz5kZM0.net
Sub test()
MsgBox Me.TextBox1.Value
Me.Name="a"
Me.Name="Sheet1"
End Sub
1回目の実行 OK
2回目の実行 MsgBoxでエラー
3回目の実行 OK
4回目の実行 MsgBoxでエラー
なんでやねん!
255:デフォルトの名無しさん
20/09/16 01:13:07.34 fUx+IXsk0.net
>>254
F8 でステップ実行してみ、あとエラーの内容くらい書いてもよくね?
256:デフォルトの名無しさん
20/09/16 10:04:16.38 HoY0/Pv80.net
>>253
ありがとうございます。
フォームを格納できるなら標準モジュールも出来るのかと思って質問しました。
標準モジュール内に書かれた関数の引数として参照先の標準モジュールを渡したかったのですが、別の方法を考えてみます。
257:デフォルトの名無しさん
20/09/16 18:43:38.23 DJD3HHCL0.net
動画ファイル(拡張子 mp4,avi等々)の長さ(時間)をvbaで得ること出来ませんかね。
動画用のプログラムでは出ているから何らか手段はあると思うのだけど。
258:デフォルトの名無しさん
20/09/16 19:23:25.54 u7LyhgECM.net
>>257
できる
はい、次
259:デフォルトの名無しさん
20/09/16 19:55:21.82 KOE6L/fW0.net
>>257
拾い物、動くかどうかは知らん
Sub ボタン1_Click()
Dim Shell, Folder
Set Shell = CreateObject("Shell.Application")
Set Folder = Shell.Namespace(Range("A1").Value)
Fil = Dir(Range("a1").Value & "\*.*")
Rows("5:65536").ClearComments
i = 5
Do While Fil <> ""
For j = 0 To 40
Cells(i, j + 1).Value = Folder.GetDetailsOf(Folder.ParseName(Fil), j)
Next
i = i + 1
Fil = Dir()
Loop
Set Folder = Nothing
Set Shell = Nothing
End Sub
260:デフォルトの名無しさん
20/09/16 20:18:38.96 pG4LN1Ne0.net
手を抜くんじゃない!
まじめにヘッダー読み込んで解析しろよ
261:デフォルトの名無しさん
20/09/16 20:21:47.41 0zA9ovKo0.net
ファイルのプロパティからは取れない場合もあるよ
262:デフォルトの名無しさん
20/09/16 21:31:45.86 chmz5kZM0.net
>>255
今環境ないんだけど、
アプリケーションの定義何とかか、
インデックス何とかか、
オートメーション何とかのどれか。
何か変なものがSetされちゃってるのかと思ったけど、
MeじゃMeしかないよね?
263:デフォルトの名無しさん
20/09/16 22:10:00.45 jvSIB85Td.net
>>260
昔、解析したことがある。
aviとかは割と簡単だね。
264:デフォルトの名無しさん
20/09/16 23:12:03.30 dsrVDQ5Z0.net
すごく初歩的な質問ですみません
&演算子で文字列と数字をつないで文字列を作った時に
出来上がった文字列に""を付けなくていいのはなぜなのですか?
MsgBox "あいうえお" は""を付ける必要がある
MsgBox "A" & hoge は文字列扱いのはずなのに""を付けて MsgBox ""A" & hoge"のようにしなくていいのが解せません
265:デフォルトの名無しさん
20/09/16 23:23:17.92 0zA9ovKo0.net
&とhogeは文字列ではなく演算子と変数
266:デフォルトの名無しさん
20/09/16 23:24:34.57 0zA9ovKo0.net
""で囲ったら演算子でも変数でもないただの& hogeという文字列にしかならない
267:デフォルトの名無しさん
20/09/16 23:48:53.36 dsrVDQ5Z0.net
ありがとうございます
>""で囲ったら演算子でも変数でもないただの& hogeという文字列にしかならない
なるほど確かにです
では、&演算子でつなぐと文字列扱いになるという認識が間違っているのでしょうか?
それとも文字列扱いにはなるけど上記の理由から外すことになっているという感じでしょうか?
268:デフォルトの名無しさん
20/09/17 00:09:43.18 pIQJoJyT0.net
>>267
その場合、
hogeは文字列として認識してください
という命令を出している
つまり
文字列(”A”) と(&) 文字列(hogeという変数に入っている文字列) を繋ぎ合わせて表示してください
というのが”A” & hoge
269:デフォルトの名無しさん
20/09/17 00:09:48.11 MJVBSNKC0.net
ダブルクォートには引数の囲むような意味はない
引数を囲む記号は丸括弧になる
たとえば X = msgbox("a" & hoge) みたいな書き方になる
返り値をとらない場合は()が省略可能ってだけ
270:デフォルトの名無しさん
20/09/17 00:11:18.08 D84tTl8o0.net
リテラルと変数について調べると理解できるかも
271:デフォルトの名無しさん
20/09/17 00:13:09.47 ncMNPksn0.net
>>267
hoteの型は何なんだ
272:デフォルトの名無しさん
20/09/17 00:21:16.12 0EHVBisp0.net
値に型ってのがあるのを理解しよう
表示したいのは、"A"という値と変数hogeの値(を連結したもの)だろ
&演算子でつなぐと文字列扱いになるってのは、演算対象を文字列に変換して結合するってこと
この場合、hogeの値が文字列以外でも文字列に変換して評価するってことだ
基本を理解したいなら、なんの説明もなく&でつなぐと文字列扱いとかいう教え方するところは避けたほうが良いかな
とりあえず動けばいいってならまあすきにすればいいけど
273:デフォルトの名無しさん
20/09/17 02:20:25.53 c2bYLY/G0.net
MsgBoxの第1引数は文字列型の値である必要があり、文字列型の値を表す式として典型的なのは、@文字列リテラルか、A文字列型の値が格納されている変数(文字列型変数)の参照。二重引用符は、文字列リテラルの表記方法に過ぎない。
&演算子は、本来、2つの文字列型の値を被演算数とする演算子だが、被演算数が文字列型の値と数値型の値であるような場合等は、適宜数値の方を文字列型の値に自動変換した上で本来の演算を行う……ということかと。重複になるが。
274:デフォルトの名無しさん
20/09/17 04:55:16.59 PzgKRL2g0.net
数値を文字に変換するなら CSTR がある
275:デフォルトの名無しさん
20/09/17 07:47:55.65 iixTl117d.net
>>267
法則を暗記するからそうなる。
法則の仕組みを覚えるんだ。
276:デフォルトの名無しさん
20/09/17 11:44:40.11 1/N+zsdG0.net
同じフォルダにある"〇〇"というCSVを開いて、そのシートの最終行を取得したいのですが
「インデックスが有効範囲にありません」というメッセージでとまります
Sub salegrp()
Workbooks.Open ThisWorkbook.Path & "\〇〇", ReadOnly:=False
MsgBox Sheets("〇〇").Cells(Rows.Count, 1).End(xlUp).Row
End Sub
他のブックの最終行を表示する方法を教えてください
(A列には最終行まで値が入っています)
277:デフォルトの名無しさん
20/09/17 11:54:47.91 DZPRMbPmM.net
csv開いたてからActiveWork ook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Rowすれば
278:デフォルトの名無しさん
20/09/17 12:14:37.64 qGYgSA/Y0.net
>>276
必要なのは最終行に入ってるデータの内容?行数を知りたいだけ?
全データをワークシートに入れる必要がなければテキストファイルとして開いた方が早いかも
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
1449日前に更新/123 KB
担当:undef