[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:31 / Filesize : 282 KB / Number-of Response : 1019
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part75



1 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:24:32.62 ID:I0u44nFvd.net]
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

232 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 07:03:43.76 ID:vE3gjDOr0.net]
そうじゃなくて2JNとか指定するやつ。
オブジェクトが無くて絶望的なんだけど。

233 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 07:22:28.14 ID:So6tXBwD0.net]
>>228
あぁHWNDとかの奴か。ごめん、これは昔諦めた。他の人お願い。
やりたいことを先に書けば、それっぽいコード書いてくれる人がでてくるかも

234 名前:デフォルトの名無しさん [2022/02/27(日) 11:02:51.91 ID:F9ScTckVM.net]
すみません。 半日つぶしてもできない。ダメ男です
なんとか協力してもらえませんか?
単純に「特定文字」のある行を削除したい(その行をその下の行の二行削除したい)

'まず、獲得ポイントを削除
Dim row_po As Long

row_po = Range("A14:D150").Find("[ 獲得ポイント ]").Row

Range(Rows(row_po), Rows(row_po + 1)).Delete

この書き方でとりあえず消えるのですが、[ 獲得ポイント ]が無かった時にエラーになり止まってしまいます。
で、スルーしてほしいのですが、なにをやってもスルーしてもらえません。
なにもしないことがこんなに難しいとは思いませんでした。
ほっといて欲しいだけなのに

どうするとアホでもわかりますかね?

235 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 11:09:42.41 ID:amhd0I0YM.net]
On Error Resume Nextを頭に入れるだけ

236 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 11:27:49.32 ID:So6tXBwD0.net]
>>230
Sub foo()
'先に見つけておく
Set p = Range("A14:D150").Find("獲得ポイント")
If Not (p Is Nothing) Then
'見つかったときの処理
row_po = p.Row
Rows(row_po & ":" & row_po + 1).Delete Shift:=xlUp
Else
'ここに見つからんかったときの処理
MsgBox "見つからんかった"
End If

End Sub

>231
それやると今度はrow_po でエラーが起きる可能性絶大

237 名前:デフォルトの名無しさん [2022/02/27(日) 11:30:41.33 ID:F9ScTckVM.net]
>>231
おおお神よ
なぜあなたは神なのか
私は知恵熱っぽくまでなったのに
ちなみに検索するとエラーが全部キャンセルされるみたいなんですが、一応範囲を決めるとして

'まず、獲得ポイントを削除
On Error Resume Next
Dim row_po As Long

row_po = Range("A14:D150").Find("[ 獲得ポイント ]").Row

Range(Rows(row_po), Rows(row_po + 1)).Delete

On Error GoTo 0

で大丈夫な感じですか
動作はしました。(他の命令のエラーはちゃんと出るかな?と)

238 名前:デフォルトの名無しさん [2022/02/27(日) 11:31:51.84 ID:F9ScTckVM.net]
>>232
あれ? まじですか
ちょっとわからない

ちなみにMsgBox を出したくないんです。
そのままスルーしてほしいのです

239 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 11:40:19.04 ID:So6tXBwD0.net]
>>233
onerrorはなるだけ使わない方が良いと思う。俺は使わずに書いてるよ
>>233でもいいけど、なるだけ少ない方が後々の変更が楽になる

Sub foo()
'先に見つけておく
Set p = Range("A14:D150").Find("獲得ポイント")
If Not (p Is Nothing) Then
'見つかったときの処理
row_po = p.Row
Rows(row_po & ":" & row_po + 1).Delete Shift:=xlUp
End If

End Sub

240 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 11:42:39.74 ID:amhd0I0YM.net]
>>234
動いたんならまず一旦良しとしていいと思う
良いやり方が他にもあるから今後更に知識が付いたその時に改良していけば良いさ



241 名前:デフォルトの名無しさん [2022/02/27(日) 11:53:19.82 ID:F9ScTckVM.net]
どうもありがとう

ただ、なんかわからないのだが、ほかの所がエラー吐いてしまっています。
ちょっと死にそうですが、悩んでみます。
多分、また来ますw

242 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 12:19:45.80 ID:So6tXBwD0.net]
どうぞ〜がんばって〜

243 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 14:32:58.22 ID:F9ScTckVM.net]
>>235
おま、これすごい

これにしてみたら他に出たエラーもピシっと消えた
On Error は動いたけど、イレギュラーなパターンだとなぜか他でエラーになった
これも試したらイレギュラーでもバッチり

つーか、俺が昨日の夜中からずううとやっていてもこんなの作れないありがとう
ホント君らすげーよ
これ作るのに寿命を迎えるレベルだわ

244 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 14:49:32.88 ID:So6tXBwD0.net]
>>239
笑った
影響が最小限になるように、ちゃんと書く方が楽なんだよ
onerrorとかですっ飛ばすと、後で余計に大変になる

245 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 17:57:55.85 ID:JWEArlQD0.net]
関数て約500種類弱あるけど、全部マスターする必要あるのかな??
知人が、「Excelができる人材の定義は関数を全部マスターしているヤツの事だ!」とか言い出しているから

246 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:04:55.19 ID:ZPGXXCGc0.net]
VBAなら関数って自作が基本じゃないの?知らんけど

247 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:06:25.05 ID:So6tXBwD0.net]
>>241
>関数て約500種類弱あるけど、全部マスターする必要あるのかな??
ないよ

248 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:28:40.28 ID:CUu39Gd8M.net]
https://forest.watch.impress.co.jp/docs/news/1293471.html

249 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:34:38.78 ID:a0+qdDh70.net]
そら作れば無限に出来るわいな

250 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:39:37.90 ID:tDC5899T0.net]
>>241
EXCELが(凄く)できる人かEXCELが(初心者だけど)できる人では違うんじゃね



251 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:47:42.24 ID:NFpbXNxz0.net]
>>241
その知人に認めたくない人がいてExcelできる人で通ってるけど
関数はマスターしてないから言ってるだけ説

252 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:50:42.59 ID:AJPusFVK0.net]
知ってる関数の数なんて誇る奴がいたら失笑もんだわ

253 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:55:10.53 ID:a0+qdDh70.net]
標準の関数は少ないよな
俺はSUM CONCATENATE IFくらいしか覚えてない(ヘルプが必要)がその知人よりは多分出来ると思う

254 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:58:34.59 ID:WwuIS/YcM.net]
>>247
多分合ってるんだろうけどメッチャ理解し難いぐちゃぐちゃ関数式の様な日本語

255 名前:デフォルトの名無しさん [2022/02/27(日) 19:18:55.52 ID:Jrkr8SKF0.net]
>>241
その知人が馬鹿なだけだぞ

256 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 19:50:11.71 ID:So6tXBwD0.net]
知人ぼろかすで草

257 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 19:54:03.00 ID:XX45AiX5d.net]
Excelにどんな機能がある=関数
ってしかいえない人の戯言では

258 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 20:40:55.89 ID:D3HmGJ+n0.net]
>>241

If 友人が「Excelができる人材の定義は関数を全部マスターしているヤツの事だ!」と言った then
  throw 友人 どこか
End If

以下正常処理

259 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 20:51:03.99 ID:nGlHhzSe0.net]
If 友人が Then
 Yo! Yo! チェケラYO!
 Go To YoYo
End If
YoYo:
Oh! Oh! 皆で楽しくチェケラYo!

260 名前:デフォルトの名無しさん [2022/02/27(日) 21:11:45.66 ID:JrRqc3Naa.net]
If 友人.Count > 0 Then
のチェックをしておかないと例外が発生しかねんぞ



261 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:18:59.32 ID:f8g0XzTm0.net]
>>254
そこはRaiseだろ

262 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:27:51.88 ID:So6tXBwD0.net]
?友人 is nothing
true

263 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:34:07.20 ID:nGlHhzSe0.net]
確認事項
・友人はいますか
・親友はいますか
・彼女はいますか
・配偶者はいますか
・家族はいますか
・老後の心配はありませんか

264 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:42:34.72 ID:NFpbXNxz0.net]
>>250
知人A, 知人が認めたくない人B
Bは皆にできる人って思われてる
Aはそれが気に食わない
だから関数をマスターしていない事を理由に言ってるだけ説

ごめん頼んだ

265 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:46:20.69 ID:pkdB1ort0.net]
人生の大抵の困難はon erorr resume nextで解決可能である

266 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:52:09.54 ID:nGlHhzSe0.net]
On Error Shutdown And Reboot With Next Life

267 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 22:13:39.17 ID:amhd0I0YM.net]
>>262

例外処理が抜けてる

If You = カーズ Then
Do Until 地球からの距離 = 0
地球からの距離 = 地球からの距離 + 1
Loop
Elseif You = ディアブロ Then
死ぬ前:
死にそう
Goto:死ぬ前
死んだ

End if

268 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 22:37:19.46 ID:oWne56vR0.net]
Dim tmp As String
tmp = "どんまい"
MsgBox tmp

269 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 23:16:15.15 ID:JWEArlQD0.net]
関数そこまで必要かな?
マクロできるなら全部マクロでやれば良いじゃんね

270 名前:デフォルトの名無しさん [2022/02/27(日) 23:42:12.81 ID:Jrkr8SKF0.net]
>>265
類は友を呼ぶ
お前もどうしようもない馬鹿だ



271 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 03:06:37.96 ID:kykjWS4h0.net]
いやだなぁ〜先輩、冗談すよ冗談
職場になんでもVBA、VBAといってマジでVBAで片付けていた偉い人がいたもんでw

272 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 08:14:19.86 ID:9UyyIrQV0.net]
知人が、偉い人が、全て他人の話
ほんとうは・・・?

273 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 08:33:28.33 ID:o5ZgQ4pV0.net]
>>268
これ以上はやめて差し上げろ

274 名前:デフォルトの名無しさん [2022/02/28(月) 18:59:30.44 ID:h1aqAX/2M.net]
すいません。 こういうのはできますか?
セルの中に改行を見つけてから止める(修正)するVBAをつくりました。
改行が見つかったら、マクロを止めて手修正をして又マクロを走らせてを繰り返します。

ここで、問題なのが改行ならいいのですが、文字が多くて折り返しになっているのがたまにあります。
それも見つけたいのですが、知恵がみつかりません。
折り返し判定みたいなのはあまりなさそうです。 それとも行の高さを判定できるなら高さ22以上とか方法があるのかな?と

すいませんが、こんなのは?ってありましたら、お願いします。


Sub test()
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate
Dim row_shou As Long
row_shou = Range("A14:D150").Find("小 計").Row
Dim Target As Range
Set Target = Range(Rows(14), Rows(row_shou - 1)).Find(What:=vbLf)
If Not Target Is Nothing Then
End
End If
Next Ws
End Sub

275 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 19:29:28.20 ID:o5ZgQ4pV0.net]
>>270
一行以外を全て検出したいなら、行の高さを検出するだけで終わると思う
改行は調べなくてもいいような

Sub foo()
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
基本の行の高さ = Cells(1, 1).RowHeight
For i = 1 To 最終行

If Cells(i, 1).RowHeight <> 基本の行の高さ Then
MsgBox i & "行目の高さがおかしいので、終了します。修正お願いします"
Exit Sub
End If

Next
End Sub

276 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 20:20:02.79 ID:h1aqAX/2M.net]
>>271
あ、あ、ありがとう
正直解読するのに一時間くらいかかって自分のに書き直せました。
一応動いていけそうです! 高さチェックでいけますね
こんなチンケな感じになりました。
神々に感謝します。

Sub test()
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate

Dim row_shou As Long
row_shou = Range("A14:D150").Find("小 計").Row

'行の高さ15以上を検索
h = 15
For i = 14 To row_shou - 1
If Cells(i, 1).RowHeight > h Then
Exit Sub

End If
Next
Next Ws
End Sub

277 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 21:56:13.38 ID:1x7bPtTEd.net]
ぶっちゃけFindは滅多やたら使わん方が良いけどまあ良かったじゃん

278 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 18:55:07.17 ID:gFYHZAxx0.net]
なんでもスレだと更新が少なく答えがもらえなさそうなので、こちらにも書き込んですみません。
Excel VBAで質問です。

現在開いているシートにマクロボタンを作り、実行させると…
現在シートのB列に検索値
別のシート(ABC)のB列の5行目〜400行目までを検索して一致したセル番号が欲しいのですが
For cnt=1 To 10 samsu(cnt)=WorksheetFunction.Match(Cells(cnt,1),Worksheets(”ABC”).Range(Cells(5,1),Cells(400,1)),0)

next
このMatch関数の正しい書き方を教えてもらいたいのですが。

279 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 22:29:13.54 ID:Nv0Sds8Bd.net]
ちゃんと見ていないが、とりあえず.cellsの前にも全部ワークシートを指定しよう

280 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 07:23:43.88 ID:bacADaAbd.net]
どっちでも好きな方をどうぞ
samsu(cnt) = WorksheetFunction.Match(Cells(cnt, 1), Worksheets("ABC").Range(Worksheets("ABC").Cells(5, 2), Worksheets("ABC").Cells(400, 2)), 0)
samsu(cnt) = WorksheetFunction.Match(Cells(cnt, 1), Worksheets("ABC").Range("B5:B400"), 0)



281 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 18:02:30.94 ID:Dpz5qFA70.net]
質問です

社員毎に月々の残業時間の合計プログラムを作っています
合計した数値に対して、30分で切り上げ切り捨てしています(会社の残業規定に則り)
(例えば、月4:10の残業であれば4:00として出力、月4:35であるば5:00として出力)
合計した数値に対してFloor関数を使って切り上げ切り捨てをしているのですが、
月23:30の残業をした社員がいた場合、出力された値が0になってしまいます
表示形式を[h]にしてみましたが、結果は変わりません
デバックでFloor関数の中の変数の値を確認しましたら、23:30のシリアル値はきちんと入っています
そうするとFloor関数で切り上げしているのが原因なのでしょうか?
どなたかご教示いただきたいです…

282 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 18:09:09.52 ID:Dpz5qFA70.net]
簡潔ですが、以下のようなコードで書いています
.cells(1,1).NumberFormatLocal = "[h]"
a = "23:30"
.cells(1,1) = Application.Floor(a + TimeValue("0:30"),TimeValue("1:00"))

283 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 18:13:22.97 ID:ydQ1ic0a0.net]
>>277
mroundで1:00単位でいいんじゃない
https://i.imgur.com/igLdP9C.png

>>278
24と表示されたよ。そのままだとエラーになるので、2行目はtimevalueにいれた
https://i.imgur.com/a54wsnQ.png

284 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 18:43:03.81 ID:Dpz5qFA70.net]
>>279
MRoundにしてみたらできました!
ありがとうございます!

TimeValueについて書き損じ失礼しました
本来は"23:30"ではなく変数が入っていて、変数には23:30のシリアル値が入っています
なぜ0になってしまうのか謎ですが解決してよかったです

285 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 19:19:22.93 ID:n7HPCvTSa.net]
23時の次は24時ではなく0時だからだわな

286 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 19:25:50.55 ID:ydQ1ic0a0.net]
>>281
いや、書式設定が[h]なら24と表示されるはず

287 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 07:42:09.33 ID:LvEeINitr.net]
>>276
無事に動きました。
ありがとうございました。

288 名前:デフォルトの名無しさん [2022/03/03(木) 13:47:21.71 ID:KJVc8U50M.net]
質問をさせていただきます。 理解ができないことがあります。
 まず、加工BOOK と マクロ保存BOOK の二種類を使用しています。

加工BOOKにある複数のシートを連続して加工するときにネット情報で下記書き方を拾いました。
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate
〜色々な動作〜
Next Ws
この「色々な動作」の中で
ThisWorkbook.Activate ’マクロ保存BOOKをアクティブ(シート指定セル指定してコピーを取ってます)
その後、Ws.Activate と書き 上記保存した文字を指定したセルにペースト
これは問題なくペーストできています。
ただ、なぜうまくペーストできるのか理解ができていません。

理由はではこれをシート毎に連続ではなく一枚だけペーストにした場合
最初の For Each Ws In Worksheets と Next Ws を削除すればいいか?と思いやってみたのですが、エラーしか出ません。

てっきりWSという関数に加工BOOKの場所データが格納されていてWs.Activateを書けば加工BOOKに戻ってきていると思ったのですが、エラーとなると違っていたのか?と理解ができなくなりました。

加工BOOKのBOOK名とかが書ければいいのでしょう

289 名前:ェ、BOOK名(ファイル名)は不特定でやりたい。他人に渡すので環境が読めない。

最初にアクティブになっていたブックシート情報を関数に入れておけばよいと想像しているのですが、どうすればいいかとかわかっていません。
グダグダな質問でわかりにくいと思いますが、二つのBOOKを行き来して片方はマクロを作動させた時にアクティブだったシートって条件にしたいのです。
[]
[ここ壊れてます]

290 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 14:00:06.45 ID:rCo9Fm7Z0.net]
AvtIVeやらしてる時点で作者も大した事なさそう



291 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 14:13:34.66 ID:9O05M6/x0.net]
>>284
For Each Ws In Worksheets
Ws.Activate
〜色々な動作〜
Next Ws

sheets("ワークシート名").Activate

WSをWorksheet("ワークシート名")
に変える
あと、Ws.Activateはなるべくやめたほうがいい
PCが重くてアクティブなシートやブックが変わると、大惨事になる可能性がある

本当にやるならopenなどで対象ファイルを開き、戻り値をsetするのが理想

>>285
??

292 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 14:19:57.38 ID:KJVc8U50M.net]
>>286
ありがとうございます。
この”ワークシート名”が分からなくても動かしたいのです。
つまり、hogehoge.xlsx だったり zukozuko.xlsxだったりするので
最初にアクティブだったファイル(シート)に戻ってくる汎用性がほしい。

293 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 14:22:48.58 ID:9O05M6/x0.net]
>>287
あぁ、じゃあ
ActiveSheet
でいいよ
ActiveSheet.Cells(1, 1) = 1
みたいな感じで使える

294 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 14:24:24.97 ID:9O05M6/x0.net]
そういやブックを指定する時はopenでいいけど、
シート名が不定な時、シートを指定する方法ってないのか
一旦開いてinputboxにインデックスかシート名入れるぐらいしかないのだろうか

295 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 14:32:22.98 ID:jSBR5AQpd.net]
まずワークシートもワークブックもわかってない事から勉強したほうがよいのではないか
それとよくわからず何となく動いたものを他人に渡して大丈夫なのかと不安になるわ

296 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 14:43:43.44 ID:9O05M6/x0.net]
あんまり大丈夫じゃないけど、そこまで言うのもねぇ

297 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 15:56:08.71 ID:KJVc8U50M.net]
心配かけます
とりあえず、データは何回でもダウンロードできるのでいくら壊れても大丈夫です。
内輪の事務ですし
やはり、どんなファイル名(シート名)でもOKとなると難しいですかね
当然フルパスみたいに書くのが良いのはわかります。

298 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 16:16:41.04 ID:jSBR5AQpd.net]
加工されるワークブックにはワークシートは複数なの?それとも1つなの?
仮に先頭にあるワークシートであれば
Set Ws = Worksheets(1)
のような指定をすればいいだけだぞ
ワークシート名が決まった名前であれば
Set Ws = Worksheets("○○")
のような指定でもOK
どのシートが加工していいのかを判断できるなら当初のFor文で回しながらシートを特定してもいいかと思うが
ある程度のルールが決まった質問じゃないと漠然としすぎて回答する側もとまどうと思うぞ

299 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 17:11:57.48 ID:AMDtBRAN0.net]
>>284
>てっきりWSという関数に加工BOOKの場所データが格納されていて
Wsは関数じゃなくて変数
その変数に値をセットしていたのがFor文
>最初にアクティブになっていたブックシート情報を関数に入れておけばよいと想像しているのですが、どうすればいいかとかわかっていません。
Set Ws=ActiveSheet
かな。試してないけど
とりあえずForの代わりにこれで動くんじゃね

あまりにも基本がわかってない感があるなぁ

300 名前:デフォルトの名無しさん [2022/03/03(木) 17:21:03.63 ID:Vn+IwdQAd.net]
コピペしかしない人なんでしょ



301 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 18:46:16.06 ID:KJVc8U50M.net]
>>294
はいすいません
関数は書き間違いです。変数ですよねw
ちょっと、脳が
Set Ws=ActiveSheet
で辻褄があいました。
最初の For Nextで全シートした場合も1シートだけやった場合もエラーが出ずに自分の脳みそも合致がいきました。
これを書いていないのに Forで動かしたときに問題なかったので???状態になっておりました。
ありがとうございます。

302 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 19:43:39.19 ID:5R1CCyAZd.net]
何ていうかVBAの言語より先にちゃんとした構文の日本語を学ぶ事をおすすめします

303 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 21:25:56.68 ID:pVJYfbHP0.net]
いやでも回答者さんの言うとおりだと思う。理屈や仕組み分からないまま使ったりしていたらいつかは大事故に繋がる。
過去にそういう事が身近であった。

304 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 21:46:06.24 ID:jSBR5AQpd.net]
何がきっかけで作ることになったか知らないけど
どうして動いてるかもわからずに作って少ししておかしいことに気づいてもすぐ直せなかったら評価悪くなると思うんだよね
自分の周りの出来事でなければ知ったことではないんだけどその辺は踏まえて作った方がいいよ

305 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:33:01.31 ID:yer8R1MmM.net]
ID:KJVc8U50M の言い回しが技術サイトでありがちな英語かロシア語の機械翻訳文に似てて草

306 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 11:35:29.63 ID:lcqTf7BDd.net]
!!Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long
For i =1 to 5
cells(i,4)=DateValue(Cells(i,1)&" 年"&" 月"&Cells(i,2)&Cells(i,3)&"日")
Next i
End Sub

上記記述して実際にシートに数字を入力すると型が一致しませんとエラーになってしまいます
どうしていいのかわからずご教授していただければと
素人みたいな質問すいません

307 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 12:01:15.53 ID:tG3yIb4ia.net]
月の位置がおかしいから?w

308 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 12:21:43.22 ID:RMBcHsBod.net]
こういうひとってデバッグの仕方とか知らないのかね?
Debug.Print(Cells(i,1)&" 年"&" 月"&Cells(i,2)&Cells(i,3)&"日")
のようなことをすればどんな値が指定されているかわかるんだからみればいいのに

>素人みたいな質問すいません
素人でもこんな質問するかなという内容

309 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 12:21:43.61 ID:6K6JgexZM.net]
>>301
とりあえず止まったときにイミディエイトウィンドウで
Debug.Print Cells(i,1)&" 年"&" 月"&Cells(i,2)&Cells(i,3)&"日"
ってやってみな

310 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 12:22:36.15 ID:6K6JgexZM.net]
被ったわ…



311 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 12:39:47.23 ID:/JtJWIIA0.net]
そもそもVBAにする必要あるのかこれ?

312 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 12:51:19.12 ID:lcqTf7BDd.net]
>>301

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
For i =1 to 5
cells(i,4)=DateValue(Cells(i,1)&" 年"& Cells(i,2)&"月"&Cells(i,3)&"日")
Next i
End Sub

すいません!
月の位置が違いました
上記の記述でも型が一致しませんとエラーになってしまいます

313 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 13:08:57.00 ID:GCjMsc400.net]
=Date(A2, B2, ... え?それ以上はやめとけって? はーい

314 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 13:15:31.27 ID:RMBcHsBod.net]
その書き方だと少なくとも変更された際のイベントでDateValueを正しく動作させるには
1から5行目までの1から3列目までにそれぞれ年月日の値が保証されないと型が一致しないとでるけど
そういう状態が担保できてるの?
1行目の入力中でもその書き方だと2行目以降が空欄だと単なる「年月日」という値でDateValue実行してしまいますよ

315 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 13:43:03.37 ID:9H2YJJUDd.net]
セルの中身が実はシリアル値でしたに一票

316 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 14:24:04.55 ID:lcqTf7BDd.net]
>>309
おっしゃるとおりだと
なんとなくわかっていたのですが
回避方法ありますか?

317 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 14:46:06.75 ID:RMBcHsBod.net]
>>311
いずれかのセルが空欄や数字以外だったら4列目に空を設定
それ以外の場合のみDateValueとかでいいんじゃないの
ただ結果的に月日が不正な値(99月など)ならどうするとかそういうのも含めて自分で考えないとこの先やっていけないのでは

318 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 14:57:28.77 ID:lcqTf7BDd.net]
>>313
なるほど
参考になります
ググって見ます!
ありがとうございます!

319 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 11:28:41.82 ID:VC ]
[ここ壊れてます]

320 名前:o1qiqP0.net mailto: すみません、質問です!
例えばA1セルに関数が入っていたとします
A1セルが空白かどうか(関数は入っています)をVBAのIF文で分岐したいですがうまく行きません
VBAでは空白を取得できているはずなんですが何故なんでしょう…
どなたか対応方法を教えてください
[]
[ここ壊れてます]



321 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 11:33:03.86 ID:e+QnjkryM.net]
If Range("A1").Fomula = "" Then

322 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 11:33:45.29 ID:e+QnjkryM.net]
あ、嘘。ごめん。間違えた。忘れて。

323 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 11:39:20.91 ID:VCo1qiqP0.net]
>>315
ありがとうございます
Formulaを設定すると関数をそのまま取得してしまいました
なので空白の時の分岐ができませんでした

324 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 11:41:01.62 ID:VCo1qiqP0.net]
大丈夫です!
ありがとうございますm(_ _)m

ご存じの方いらっしゃいましたらよろしくお願いします

325 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 12:20:48.22 ID:vjLwCjzB0.net]
普通にセルのValueなりTextなりを見ればいいんじゃないの?

326 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 12:37:16.79 ID:YxxaCHXb0.net]
>>314>>318
If Range("A1").value = "" Then

>>319
その普通を学習前の段階ぽい

327 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 13:18:52.50 ID:+eE97yRCa.net]
空なのか空白なのか

328 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 13:28:01.68 ID:ez1E04nZd.net]
Trim(.Text)じゃないか?

>>321
数式が入ってたらEmptyにはならん

329 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 14:12:30.12 ID:vjLwCjzB0.net]
Empty と空文字列と空白は違うって話かと

330 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 19:12:34.37 ID:IBMOg+Z/0.net]
前任者のシートで0を書式で空白にしてるのには参ったね
textプロパティを覚えるきっかけにはなったけど



331 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 19:25:23.65 ID:fxoU/Jgx0.net]
文字列枠だけど 書式は #
よくやるw

332 名前:デフォルトの名無しさん mailto:sage [2022/03/11(金) 06:05:40.07 ID:a7Y3SJRd0.net]
すみません、質問させてください。
VBAで自作したクラスのメソッドやプロパティの一覧を列挙するにはどうすれば宜しいでしょうか?
どのような自作したクラスでも使える汎用的なものを作成したいです。

333 名前:デフォルトの名無しさん mailto:sage [2022/03/11(金) 07:32:33.79 ID:mh6S44cma.net]
すみません。
特定のセル内に有るリンクを抽出する方法は有りますか?

334 名前:デフォルトの名無しさん mailto:sage [2022/03/11(金) 08:32:32.67 ID:vHBnGMWOd.net]
>>326
VBAでは無理
ソースをエクスポートしてテキストファイルを処理するぐらいしかないと思う
VB.netならGetMembersってのがあるんだけど

335 名前:デフォルトの名無しさん mailto:sage [2022/03/11(金) 08:33:31.79 ID:vHBnGMWOd.net]
>>327
Hyperlink

336 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 01:24:13.27 ID:7NvJtuE10.net]
>>328
なるほど、VBAでは無理なんですね。
以前、VB.Netの命令をVBAで走らせることが出来る場合があることをこのスレで聞いたことがあるような気がしましたので、
そちらとAPIで実装出来ないかを模索してみます。ありがとうございました。

337 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 03:38:02.55 ID:pgjQzAZm0.net]
オブジェクトブラウザがやってるけど、どうやってるんだろうな
>>328
エクスポートとかしなくても、VBEオブジェクト使えばコードのスキャンはできる
プロシジャ名の列挙だけでよければここの実行結果3がそうじゃね
https://excelwork.info/excel/codemoduleproperty/

338 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 08:17:43.49 ID:7NvJtuE10.net]
>>331
後出しになってしまい申し訳ありません。
実は、実際にやりたかったことは
自作したEntityクラスのプロパティを
片っ端からGetして配列に入れ込み、
それをシートに展開すると言うことでした。

名前の列挙さえ取得できれば
後はリフレクションで呼び出せば可能と
考えていました。

おかげで実装の目処がつきました。
ありがとうございます。

339 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 02:21:31.96 ID:YEneWsYd0.net]
どういう状況で使うんだろう
自分で作ったのに数が多すぎて覚えてないとか?

340 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 02:43:05.91 ID:B1jPEMw70.net]
素人ですが質問させて下さい。

画像のような、1つのシートに20行単位の表で、連番と日付を上の表から取得するようなブックを作成しています。
表の順番を変えても、常に1つ上の表の番号+1、同じ日付としたいため、直接セルを参照せずこのような関数を使用しています。

式は、↓としています。
=INDIRECT(ADDRESS(ROW()-20,COLUMN()))

起動中は問題なく動作するのですが、ブックを閉じて再起動すると、起動時に必ず落ちてしまいます。(手動計算にすると開ける)

コピーを作成して、上記の式の部分だけ消すと問題なく起動します。

この場合、何が悪いのでしょうか。或いは代替手段があれば教えて頂けると助かります。

https://i.imgur.com/cVZnwnZ.jpg



341 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 02:49:45.62 ID:B1jPEMw70.net]
普段VBAを触っているためVBAスレで質問してしまいました。
スレ違いであればスルーして下さい。

342 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 03:12:17.58 ID:JfJkUCau0.net]
>>335
多分Excel板なら親切な人が回答してくれすよ

343 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 05:18:44.42 ID:JG4Baegn0.net]
>>334
offsetで良いと思う。indirectは挙動が微妙におかしい
t46=offset(t26,-20,0)

>>335>>336
回答者は被ってるからどっちでもいいよ

344 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 11:02:15.36 ID:B1jPEMw70.net]
レスありがとうございます。

こいつ自体難のあるものなんですね。
offsetで狙った動きができました。ありがとうございます。

345 名前:デフォルトの名無しさん mailto:sage [2022/03/13(日) 14:32:38.85 ID:UXs3pJFgd.net]
普通に「=R[-20]C+1」じゃダメなのかね(R1C1形式

346 名前:デフォルトの名無しさん mailto:sage [2022/03/14(月) 05:49:07.49 ID:3S2IFgLOM.net]
>>339
これだと移動させたとき式の値も変動してしまいました。

347 名前:デフォルトの名無しさん mailto:sage [2022/03/14(月) 07:57:10.59 ID:727wXMaZd.net]
>>340
失礼、移動後も保証しないとだめだからこれではだめですね

348 名前:デフォルトの名無しさん mailto:sage [2022/03/14(月) 17:48:06.77 ID:yx1wpkrnM.net]
>>334ですが、当初安定していたもののまた同じ現象になりました。

端末を変えるなり新しいブックにして作り直したり色々試すも改善せず、T列の参照だけがこの現象を引き起こしている(参照先が文字列だと発生しないが数値は発生)ことが分かったため他の列を経由して参照する形で概ね落ち着きました。

エクセル自体のバグなのか分かりませんが同種の状況の方の参考まで。

349 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 13:19:58.65 ID:cMhtDWKy0.net]
>>342
多分ブックが壊れている
新しいブックを作り、1シートずつコピーすれば直る可能性がある
その状態で使い続けると完全に壊れて、開けなくなる可能性があると思う

350 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 04:32:35.42 ID:3pfuXf5y0.net]
ブックがブックわれている



351 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 07:48:40.55 ID:/fL7/vIcd.net]
セル「 ちくしょーちくしょー! 完全体に…… 完全体にさえなればー! 」

352 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 07:55:37.71 ID:tVfnjSl40.net]
エクセル「私の行数は 1048576です」

353 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 10:32:53.21 ID:EfOqqAli0.net]
質問させて下さい。
EXCELの自ブックのシートにVBAにてADO接続でSQLを投げてRecordSetに値を取得していますが、
あまりに遅いのでINDEXを対象のシートに設定したいのですが、可能でしょうか?
可能であれば実装方法を教えて頂けるとありがたいです。

CREATE INDEXのSQLを投げると
「この操作は、このタイプのオブジェクトには実行できません。」というエラーが返って来ます。

EXCEL VBA上でのADO接続だったのでこちらのスレで質問させて頂きました。
もしスレ違いで有れば誘導して頂けるとありがたいです。

354 名前:デフォルトの名無しさん [2022/03/16(水) 20:05:55.54 ID:E9jeVJ9d0.net]
エクセルの開発、挿入、フォームコントロールでリストボックスを作って操作するのですが
sheet.ListBoxes("List").AddItem "A" だったかな?で追加できるんですが
sheet.ListBoxes("List").Clear で全て消去したくてもエラーになります。
sheet.ListBoxes("List").RemoveItem 1 で消せるので .ListCountが0になるまで
消していくとやりたいことはできるのですがClearのような1行で消す方法が知りたいです。
あと選択している内容を取得したいのですが.Valueだと内容ではなくインデックス番号?が返ってきます
選択している内容を文字列で取得できないのでしょうか。検索してもユーザーフォームのページばかり
出てきてわかりません。どなたか知っていたら教えてください。

355 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 04:53:04.06 ID:2UkhCjLQ0.net]
>>348
全消しはRemoveAllItemsかな?
内容の取得はItem(インデックス番号)かな?
マニュアル見てそれっぽい単語を見つけただけだから違ってるかも

356 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 05:57:03.26 ID:RdQIwXxN0.net]
最近のExcelってヘルプもついていないの?

357 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 06:07:57.47 ID:UlLj9IGM0.net]
ネットがあるからねぇ

358 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 11:46:40.93 ID:mL7eqXCg0.net]
それでなくなったのか、知らんかった

359 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 12:31:38.84 ID:9VjLQzax0.net]
F1押すだけでヘルプ出てくるの便利だったのにね

360 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 12:35:28.43 ID:++LfIShu0.net]
F1ヘルプ起動大嫌い
起動遅いから誤爆した時ストレス



361 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 12:48:39.33 ID:Rh0i5fdo0.net]
まあ市販ソフトとかゲームとかおしゃんな小物とかもネット参照多くなったしね

362 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 15:59:04.45 ID:2UkhCjLQ0.net]
2010のあたりでヘルプがオンラインになって、旧バージョンのヘルプファイルを無理矢理インストールして使ってた記憶がある
あれってどのバージョンの話だっけ

363 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 16:00:36.21 ID:2UkhCjLQ0.net]
>>348
VBAから操作するんなら、たぶんフォームコントロールよりActiveXコントロールのが簡単だと思うよ
MSは推奨してないみたいだけど

364 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 18:51:23.33 ID:NNC6CjWiM.net]
やたら重かった無能なイルカよりはマシだろう

365 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 19:51:28.31 ID:hQEb7r5k0.net]
お前を消す方法なつい

366 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 20:00:50.39 ID:+xJma3Ej0.net]
>>348
https://www.sejuku.net/blog/37803 ここ読んでがんがれ

367 名前:デフォルトの名無しさん [2022/03/17(木) 22:15:36.31 ID:UYkpbTrn0.net]
>>349
全消しはRemoveAllItemsでできました。Itmeで内容はとれずエラーになりました。
マニュアルはマイクロソフトのExcel VBA リファレンスかな?そこで検索かけてもよくわからないのであきらめます。
Valueでもやりたいことはできそうなので

>>357
ActiveXでのやり方はわかるんですけどできればActiveXより新しいの使いたいんですよね。
別件でActiveXが大量に使われているブックが物凄く重くなっているのを見たことあってあまり使いたくない。てのもあります。

>>360
ユーザーフォームのことじゃないです。

368 名前:デフォルトの名無しさん mailto:sage [2022/03/18(金) 09:26:17.20 ID:yuFF0zGe0.net]
じゃあこれ
officetanaka.net/excel/function/tips/tips56.htm

369 名前:デフォルトの名無しさん mailto:sage [2022/03/18(金) 10:46:32.32 ID:GvFVeYD4d.net]
>>361
List(参照したい位置)でいけるんじゃないか
参照したい位置はListIndexでとれるかと
複数選択ならSelected(位置)でTrueになるところかな

370 名前:デフォルトの名無しさん mailto:sage [2022/03/18(金) 19:57:18.31 ID:hw4UnylL0.net]
シート上で任意に選択した範囲を set myRange = 選択範囲 のように代入した後、
For Each buf In myRange.Value
処理A
Next
という処理をしようとすると、
・選択範囲が複数ある場合:正常に動作する
・選択範囲が1つの場合:「型が一致しません」のエラーになる

「For each ○ IN ●」の●には複数セルが指定されていないといけないということでしょうか?



371 名前:デフォルトの名無しさん [2022/03/18(金) 23:38:51.84 ID:q1DQLrxB0.net]
>>364
そうです 

set buf as range
For Each buf In myRange
debug.print buf.value
Next
こんな感じじゃだめですか?

372 名前:デフォルトの名無しさん [2022/03/18(金) 23:53:01.28 ID:q1DQLrxB0.net]
おっと間違えた
dim buf as range
For Each buf In myRange
debug.print buf.value
Next

373 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 00:50:36.99 ID:OOddD3UI0.net]
myRange.Value の Value がおかしかったのか。
ありがとうございます。

374 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 02:03:56.48 ID:yYNieGSo0.net]
>>364
myRangeの何をbufとしてとりたいの?各セル、連続した複数のセル、myRange全体によつて正しいこーどは異なる

375 名前:364 mailto:sage [2022/03/19(土) 10:45:02.08 ID:OOddD3UI0.net]
>368
任意のドラッグ操作で選択したセルと同じ行のL列(左から12番目)に入っている文字列を結合して表示させようとしました。

Dim cnt As Integer
Dim myRange As Range
Dim buf As Range
Dim target As String

cnt = Selection.Rows.Count
Set myRange = Range(Cells(Selection.Rows(1).Row, 12), Cells(Selection.Rows(1).Row + cnt - 1, 12))

For Each buf In myRange
target = target & buf & vbCrLf
Next

Debug.Print target

376 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 10:48:26.22 ID:kJy21FG50.net]
>>347で質問させて頂いたものです。
色々調べましたがシートにINDEXを設定するのは実現可能か分からなかったのと、
出来ない場合、代替案を考えたいのですが、
ひとつのシートに20万行、100列の一覧が有ったとして
そのとき、ひとつの項目(項目1とします)はある値とイコール、更に別の項目(項目2とします)は
項目1で抽出したレコードの内の最大値を求めたいです。

どのような方法が一番速く処理出来ると思いますか?

377 名前:364 mailto:sage [2022/03/19(土) 10:48:43.76 ID:OOddD3UI0.net]
>>369は正常に動作したコードです。

最初は下記のようなコードでエラーとなっていました。

Dim buf As Variant ←Variant型にしていた。

For Each buf In myRange.Value ←.Valueを付けていた。
target = target & buf & vbCrLf
Next

Debug.Print target

378 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 10:51:21.24 ID:CvJNM5+IM.net]
範囲検索するのにfindとworksheetfunction.matchとではどちらが速いですか?

379 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 10:52:04.86 ID:CvJNM5+IM.net]
ちなみに完全一致の場合です

380 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 11:51:46.09 ID:/t3SgnSXa.net]
自分で試せばいいだろw



381 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 11:51:57.89 ID:i9OMIEsk0.net]
試したほうが早いよ

382 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:52:21.15 ID:UXt2lmR80.net]
は?試してたらこんな所で聞きませんけど?

383 名前:デフォルトの名無しさん [2022/03/19(土) 12:52:58.71 ID:4DGoWoBi0.net]
>>369
>cnt = Selection.Rows.Count
>Set myRange = Range(Cells(Selection.Rows(1).Row, 12), Cells(Selection.Rows(1).Row + cnt - 1, 12))

Set myRange = Cells(Selection.Row, "L").Resize(Selection.Rows.Count)
もっと簡単に書けそうな気もするがこんなもんかな

384 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 13:47:10.61 ID:zEPprvQva.net]
>>376
試してなくても、こんなところで聞かないでくださいw

385 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 14:44:42.82 ID:qNoriQBK0.net]
>>377
ちゅんちゅんさん推奨の書き方か
resize真似して使ってたんだけど間違えやすかった

386 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 15:12:32.83 ID:OOddD3UI0.net]
>>377
ありがとうございます。.Resizeを使うとスマートに書けるんですね。使ってみます。

387 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 15:57:19.25 ID:rhR/rlzyd.net]
autofilterで表示されたものだけで、列をautofitすることは出来ますか?

388 名前:デフォルトの名無しさん [2022/03/19(土) 16:36:01.13 ID:4DGoWoBi0.net]
SpecialCells(xlCellTypeVisible)でできんじゃねーかな

389 名前:デフォルトの名無しさん [2022/03/19(土) 16:40:58.85 ID:AuBNrAzT0.net]
コードは

390 名前:スマートなのに…って言われろ []
[ここ壊れてます]



391 名前:デフォルトの名無しさん [2022/03/19(土) 18:04:38.19 ID:4DGoWoBi0.net]
Range("テーブル1[項目A]").SpecialCells(xlCellTypeVisible).Columns.AutoFit
出来ないのかと思ったらできるじゃん

392 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 18:22:46.82 ID:qn2+ggVDa.net]
VBA素人にご教示ください

PowerQueryで整形したテーブルのデータを
別ブックのVBAに引っ張ってきたい場合
・列データをユーザー定義型にまとめる
・ListObjectを使う
どちらがベターでしょうか?

393 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 18:48:13.74 ID:XaCRBAWQM.net]
引っ張ってきたい側でpowerquery使って整形したテーブルをソースに指定する

394 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 19:07:47.91 ID:qn2+ggVDa.net]
すいません、うまく説明できてませんでした
PowerQueryとVBAは別ブックでも同じブックでもいいです

やりたいことは
巨大なテーブルを参照してVBAで検索フォームを作りたい
です
その場合、テーブルデータを
・ユーザー定義型にまとめる
・ListObjectを使う
どちらがいいのか?が質問の意図です
改めてお願いします

395 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 20:45:24.46 ID:ecCVM1RA0.net]
全くの素人で申し訳ないんですけど、やりたい事

❶:B10からスタートしてボタンを押したら次の行に指定された文字を入力していく。

❷:Ifを使って、もしB29行まで埋まった状態でボタンを押したら
 B2からB29までコピーしてB1からB28にペースト
 →B29に指定された文字を入力

色々頑張ったけど自分で❶は出来たけど❷ハードルが高かった・・・

396 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 21:21:42.73 ID:titlKmjCa.net]
2のどの部分ができないのか

397 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 21:33:07.78 ID:qNoriQBK0.net]
If Range("B29")<>"" then Range("B1:B28").value = Range("B2:B29").value
こんな感じか?

398 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:17:04.40 ID:hVJQeY+Td.net]
>>389
IFで範囲内空白があった場合を出そうとしてたんだけどうまくいかなかったんや・・・

399 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:17:58.96 ID:hVJQeY+Td.net]
因みに入れたいのは勝利か負け。2つボタン作れば別々に行けるかな

400 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:56:32.21 ID:hVJQeY+Td.net]
>>389
ありがとう。認識できた。そしてなんとか検索して思うような結果になった!



401 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 00:13:30.21 ID:ZUsPYd03M.net]
>>382
>>384
ありがとうございます。
明日試してみます。

402 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:49:20.37 ID:CEJcVsO40.net]
>>387
巨大ならlistobjectかadoじゃないの、速度的に。
巨大じゃなきゃ何でもいいや。

403 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 06:37:24.28 ID:Md+DYeh30.net]
>>372
ちゃんとタイマー走らせて確認してるわけではないけど体感的には大して変わらない
でも完全一致で検索をかける場合matchは検索対象が存在しないとエラー停止するのに対してfindはset range変数=対象範囲.find(ryで検索をかけてやればrange変数がnothingか否かで判別可能だから個人的にはfindの方が好きかなぁ

404 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 08:33:55.10 ID:Zh6y5r970.net]
>>370
同じようなことを前考えたけど、恐らくEXCELのシートにインデックスを貼るのは無理っぽい。
ADOどころか拡張機能であるADOXでも無理だったはず。

代替案としてはSQLが使えないので、都度個別で考えるしかないけど、とある項目の最大値や最小値が入っているレコードの内容が欲しいなら基本、MATCH関数での検索となると思う。

405 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 10:22:27.56 ID:HKRI5d8YM.net]
>>370
> どのような方法が一番速く処理出来ると思いますか?
フィルターかけてSUBTOTAL(4, 範囲)

406 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 13:33:44.21 ID:NjSblaend.net]
>>382
>>384
うまくいきました。
ありがとうございます。

407 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 15:42:40.21 ID:IQ9r07oYM.net]
>>369
すまん、368だけどコード見てもやりたいことがまるでわからんので、回答書けない

408 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:07:32.87 ID:fXpRWn260.net]
初心者のため、ご存じでしたらご教授お願い致します。
エクセルから印刷する際、プリンタをカラー、モノクロをそれぞれ
自動印刷できませんでしょうか?
PageSetup.BlackAndWhite = True/Flase
以外で方法がありましたら、ご教授をお願い致します。

409 名前:デフォルトの名無しさん [2022/03/20(日) 19:41:51.49 ID:V5Xg0/PX0.net]
>>401
その方法では成功しないのですか?

410 名前:デフォルトの名無しさん [2022/03/20(日) 19:51:58.85 ID:aHWtYUUu0.net]
素人にご指導願います。

生年月日や所属等を含めた社員のリストを作ってまして、氏名等で検索できるようオートフィルターをvbaで作るところまではできました。

「チェックボックスにチェックを入れたら、指定した日付と同じ生年月日でフィルターをかける」という操作は可能でしょうか。
例えば、セルに1990/3/1を入れてるとして、チェックボックスにチェックを入れたらフィルターがかかって1990/3/1の生年月日だけ出てくる(それ以外は消える)というものです。
チェックボックスにチェックを入れるかどうかで指定した日でフィルターをかけるかどうかを判断したいです。

もし可能でしたら、ご教示いただけると幸いです。
よろしくお願いします。



411 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:56:19.87 ID:fXpRWn260.net]
>>402
PageSetup.BlackAndWhite = Falseで白黒印刷設定したのですが、
塗りつぶしの背景が白で印刷されてしまいます。
また、カラーの図が白黒で印刷できませんでした。
プリンタのプロパティにある印刷設定(両面、集約、カラー等)はVBAでは制御できないでしょうか?

412 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:02:50.72 ID:0CQh90gjM.net]
>>401
> 以外で方法がありましたら
なぜこういう人は以外でないとダメな理由を書かないのか

413 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:15:26.37 ID:KxZjhn5zM.net]
>>404
すまん、リロードしてなかった
っていうか最初から書けよ…

> PageSetup.BlackAndWhite = Falseで白黒印刷設定したのですが
白黒設定は True じゃね?

> プリンタのプロパティにある印刷設定(両面、集約、カラー等)はVBAでは制御できないでしょうか?
無理、
Application.Dialogs(xlDialogPrinterSetup).Show
で、ダイアログを表示させるのが精一杯

414 名前:デフォルトの名無しくん [2022/03/20(日) 20:21:02.46 ID:V5Xg0/PX0.net]
>>404
プリンタドライバをもう一つ入れて、そのドライバの初期設定を白黒にして「白黒印刷専用」とする。
このプリンタ(ドライバ)をVBAで選択して印刷する。

過去にやったことがあるけどちょっとめんどくさかった記憶
他にいい方法あるのかな

415 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:23:50.61 ID:Md+DYeh30.net]
>>403
チェックボックスにマクロを登録してフィルターのキーをその入力があるセルを参照すれば良いだけだと思う
例外処理があるならそれはどういう条件で省くのか分からないから自分で考えて

416 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:36:02.96 ID:fXpRWn260.net]
>>406
ご回答ありがとうございます。
理由も一緒に書けばよかったですね。大変失礼致しました。
以後気を付けます。

やはり無理なんですね。
他のかたがご指摘のように、白黒専用プリンタドライバを増やして
プリンタを切り替えてトライしてみます。

ご指摘の通り、PageSetup.BlackAndWhite = Trueが白黒です。失礼致しました。

417 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:41:31.10 ID:fXpRWn260.net]
>>407
ご回答ありがとうございます。
プリンタドライバを増やす方法、ご提案ありがとうございます。
早速トライしてみます。
ドライバーを入れた後、プリンタの基本設定で白黒を初期設定にすれば白黒専用でいけますね。

418 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 21:09:18.42 ID:j6YhEUF6d.net]
>>403
多分VBA要らない
スライサーで十分

419 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 02:46:04.32 ID:HoitaytG0.net]
スライサやタイムライン知らない人多いらしいね
マイナーなのかな?

420 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:08:07.49 ID:8sRo6eoq0.net]
マイナーはマイナーだと思う
MOS受けて初めて知ったわ



421 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:21:11.67 ID:K7MjVs2M0.net]
テーブルからしてまだマイナーだからかしら?

422 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:27:35.78 ID:Od0FfcR ]
[ここ壊れてます]

423 名前:PM.net mailto: ブックの共有するとテーブルが使えない
共有機能とテーブルどちらを選ぶとしたら会社では共有を選ぶ
糞共有機能は早く廃止してほしいな
[]
[ここ壊れてます]

424 名前:デフォルトの名無しさん [2022/03/21(月) 08:06:13.98 ID:S9+WMeZFH.net]
誰か教えてください
各営業所から毎月送られてくる実績ファイルを一つのブックに集計するマクロを作りたい
一つのフォルダに全てのブックを入れてループ処理するマクロ自体はできたんだけど肝心の転記の仕方がわからない
具体的には各ファイルの指定のセルから集計表ファイルの指定のセルに営業所名ごとに転記したい
営業所ファイルには4〜3月まで縦に月毎に実績が並んでいて集計表のファイルは横に月毎になってるって感じ
どうしてもわからなくてどなたか助けてください

425 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 08:19:15.34 ID:/kHY2rERM.net]
powerqueryだな

426 名前:デフォルトの名無しさん [2022/03/21(月) 08:24:32.18 ID:S9+WMeZFH.net]
>>417
ありがとうございます
パワークエリってやつですかね?
検索かけたら使い方分かりそうでしょうか?

427 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 08:52:49.57 ID:K7MjVs2M0.net]
>>418
ようつべのライブラリに放り込んでた中から
役に立ちそうなもの見繕ってみた。

PLをフォルダに放り込むだけで科目ごとの数値を比較できる【エクセル パワークエリ PowerQuery】
https://youtu.be/xxc5sCl6U3w

大量のエクセルファイルを1つにまとめる方法【ファイル名活用】
https://youtu.be/XMwbj7x4Q0Y

【マクロ無しで】大量ファイルを1つに統合。簡単にクリック操作で可能(Power Query、取得と変換)
https://youtu.be/RCmoho3jU8Q

PowerQuery 複数のExcelファイルからデータを結合する方法
https://youtu.be/VxKoqBJWgRo

428 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:00:07.15 ID:8sRo6eoq0.net]
>>416
Sub foo()

'開いてset
Set 転記先ブック = ThisWorkbook
Set 営業所ブック = Workbooks.Open( _
"C:\Users\81909\Desktop\eigyosyo.xlsx")

'転記
転記先ブック.Sheets("sheet1").Range("b2:d3").Value = _
営業所ブック.Sheets("sheet1").Range("b2:d3").Value

End Sub

保存ファイルのパスと転記セルの範囲変えたら使えると思う

429 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:06:14.38 ID:Yo31hjL10.net]
>>397
ありがとうございます。
やはりEXCELのシートにINDEXを設定するのは無理なんですね。

>>398
ありがとうございます。
残念ながら20万件100項目という量のせいか、
フィルターを掛けるとそのまま固まってしまい、いつ返ってくるか、そもそも返ってくるのかすら分からない状況になりました。

430 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:14:48.04 ID:8sRo6eoq0.net]
>>421
そもそもフィルター掛ける必要があるのかどうかってのもあるけど・・・
ぱっとおもいつくのは

・forで回して別シートに転記。量が少なければそこまでかからんはず。量が多いとかなり大変
・別シートにfilter関数。かなり軽いけど、その量に対してはやったことないな
・スプレッドシートでquery関数。軽さならこれが最強で、めちゃくちゃ軽い



431 名前:デフォルトの名無しさん [2022/03/21(月) 16:06:54.19 ID:YtFKrPKNa.net]
>>419
ありがとうございます
見て参考にさせていただきます

432 名前:デフォルトの名無しさん [2022/03/21(月) 16:10:10.41 ID:YtFKrPKNa.net]
>>420
ありがとうございますこの構文のでいける感じですか?
ホントど素人で申し訳ないんですけど転機の構文は何をしてる感じでしょうか?

433 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:14:49.98 ID:ombAFbaLM.net]
>>420は要点をコンパクトに上手に説明してる
これが理解できないなら自分で最終回答に辿り着くのは無理だよ

434 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:21:01.88 ID:8sRo6eoq0.net]
>424
転記の部分は値でコピーペーストだよ
試しに動かしてみたほうが早いと思う

435 名前:デフォルトの名無しさん [2022/03/21(月) 16:38:45.50 ID:YtFKrPKNa.net]
>>425
>>426
ありがとうございます
まずは動かしてみます

436 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:43:02.21 ID:HoitaytG0.net]
テーブルってまだ普及していないねかな?

437 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:50:26.11 ID:DBpwCepOM.net]
永遠に普及しないでしょうね
列島猿はセル結合したり自分で色塗ったり線引いたりするのが大好きで、お仕着せのDBにデータだけ放り込むみたいなのは苦手なので

438 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:56:11.28 ID:8sRo6eoq0.net]
全面的に同意
テーブルで表作ったらテーブルを解除しろって言われるレベル

439 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 17:19:32.38 ID:fDbYf0xJ0.net]
>>424
転記する際に縦横を置換したいんじゃねえの?
420の例にはそれが入ってないかと

440 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 17:21:13.79 ID:fDbYf0xJ0.net]
テーブルでも椅子でもいいからさっさとやれと言われるわしら下っ端



441 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 17:57:58.00 ID:bPJRBgFUM.net]
>>416
マクロ記録開始してその転記の操作してみればいいかと

442 名前:デフォルトの名無しさん [2022/03/21(月) 19:13:04.04 ID:S9+WMeZFH.net]
>>431
あーそうなんですね
そこ大事なところなもんで…
ありがとうございます

443 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 19:37:57.87 ID:HoitaytG0.net]
いつも思うのだけど、これだけExcel情報が世の中に溢れているのにセルご法度の結合だの色塗りまくるだの改行だのする人ばかりなのは何故なんだろうね??
パソコン雑誌とか読んで勉強していないのかなと?

444 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 19:43:19.70 ID:zSyDDKWUH.net]
>>435
www2.odn.ne.jp/~cbl97790/shinsakutenjishitu.htm

445 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 19:53:51.30 ID:8sRo6eoq0.net]
>>435
業務改革を微塵も考えていないから
一日8時間で、最初に与えられたルーチンが回ればそれで良いと考えてる人がほとんど
なんでそうなってるかは、知らん

446 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 20:06:38.09 ID:7hRN3rZ2M.net]
>>435
別にExcelの達人になるわけじゃないし
そもそも結合するなと言うなら縦方向の「選択範囲内で中央」を実現しやがれ

447 名前:デフォルトの名無しさん [2022/03/21(月) 20:11:42.48 ID:S9+WMeZFH.net]
>>433
それも思ったんですけどそれだと恐らく一つの営業所の実績を一つのセルにコピーする操作になってしまいそうで…

448 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 20:23:41.52 ID:2j3OjuAE0.net]
>>439
ここまでの説明で理解できてないようなので
とりあえず営業所毎ファイルと集計表ファイルをアップロードしないと話が進まない

449 名前:デフォルトの名無しさん [2022/03/21(月) 20:42:56.54 ID:S9+WMeZFH.net]
>>440
オケ
さすがにそこまでは出来ないので色々試してみます
ありがとうございました

450 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 20:43:57.15 ID:8sRo6eoq0.net]
>>439
転記部分は好きなように変えたり増やしたりスレば良い
b2をd3に、a1をe5に、など、なんとでもなる。

'転記
転記先ブック.Sheets("sheet1").Range("b2").Value = _
営業所ブック.Sheets("sheet1").Range("d3").Value
転記先ブック.Sheets("sheet1").Range("a1").Value = _
営業所ブック.Sheets("sheet1").Range("e5").Value



451 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:18:25.50 ID:8fSFwG7JM.net]
>>439
思うだけで手を動かす気はないのね…
いち抜けた~っと

452 名前:デフォルトの名無しさん [2022/03/21(月) 21:20:10.88 ID:S9+WMeZFH.net]
>>443
ごめんなさい会社のファイルなので今日できんのよ
明日行ったらやってみる

453 名前:デフォルトの名無しさん [2022/03/21(月) 21:21:07.73 ID:S9+WMeZFH.net]
>>442
ありがとうございます!
やってみます!

454 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:49:42.78 ID:HoitaytG0.net]
日本のExcelのレベルが低いからExcel講師やパソコン教室が潤うと。

455 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 22:13:13.78 ID:NuDNOSQMd.net]
ループ文とか条件文とかユーザーフォームとかクラスとか使ってごちゃごちゃやってるけど結局のところファイルの開閉と転記作業しかしてない事に気づいた

転記があれば何でも出来る

456 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 23:00:27.32 ID:Rbd9piL90.net]
転記の子

457 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:36:53.70 ID:000FKf5P0.net]
始めたてのド素人ですがご教示頂けると幸いです。
表の列ごとにランダムに入っている異なるフォントの色で正負を判断して最終行に和と差の合計値を出力したいのですが可能でしょうか?
詳しく言うと赤色が負として、黒色が正としてセルに数値が手打ちされてます。
列の最終行を取得しsum関数を挿入することはできるのですが、フォントの色で正負を判断して合計値が出せるのか教えていただけないでしょうか。

458 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:49:54.42 ID:kEBDDtio0.net]
>>449
もともとエクセルにはマイナスの数字を自動的に赤くする機能がある
その機能で色を変えてるんだと集計の方法も変わってくるから、まずはそこを確認して

459 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 01:08:13.62 ID:TibwPpTv0.net]
書式に辿り着ければ
自ずと答えが見つかろうぞ

460 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 01:19:04.08 ID:KVIRUNm3d.net]
そもそもVBA不要
sumif関数で出来る



461 名前:デフォルトの名無しくん mailto:sage [2022/03/22(火) 02:43:58.13 ID:d3YPRjya0.net]
きっとこれは黒色の負とか青色の正とかあって
あえて色で集計したいんだろうな


と、深読み

462 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 12:14:00.76 ID:000FKf5P0.net]
ご返信ありがとうございます。
表のシートが種類ごとにあって量が千を超えているので自動化したい所存です。
前任が手書きの台帳をエクセルに落してくれたまでは良かったのですが、他の社員が手書きのときと変わらず正の値で色のみ変えて入力するため、毎年年度末になると延々と手作業で何時間も単純作業を強いられるのでなんとかならないかと思案しておりました。

463 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 12:33:30.37 ID:jGZXGfWV0.net]
条件書式でゼロ以上は赤字にするとかでもダメなんか?
逆にVBA使った方が遅かったり不便にかりそうな案件だと思うんだが

464 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 13:33:25.27 ID:MYdjPEb1M.net]
>>421
> 残念ながら20万件100項目という量のせいか、
> フィルターを掛けるとそのまま固まってしまい、いつ返ってくるか、そもそも返ってくるのかすら分からない状況になりました。
PC買い替えろ
30万行x300列に数値データを埋めてやってみたけどフィルター処理なんてほぼ瞬時に終わるぞ

465 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 13:38:08.96 ID:mA7AOTDM0.net]
他の社員が入力してるものだからなあ
集計よりも入力用のシートを何とかできたら手っ取り早いんだがそれは無理なんかな

466 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 13:43:49.21 ID:R4HxgmoiM.net]
色付けるよりマイナス記号打つ方が速いだろうに……
ご苦労さまでした

467 名前:デフォルトの名無しさん [2022/03/22(火) 13:48:33.03 ID:C94PEu1/d.net]
>>454
はっきり言えばこんなこともできないお前は手を出すな

468 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 14:03:10.79 ID:l3SAD7eYM.net]
>>455
元のデータが 1, -2 ってなってるところを 1, 2 (←赤文字) で入力されてるんだろ

>>454

if Cells(行,列).Font.Color = RGB(255,0,0) Then ...
で判断できるよ
データ書き換えていいなら(てか、個人的にはそうすべきと思うが)
For C In ActiveSheet.UsedRange
If C.Font.Color = XlRgbColor.rgbRed And IsNumeric(C.Value) Then
C.Value = -C.Value
C.Font.Color = XlRgbColor.rgbBlack
End If
Next
として、一気に書き換えちゃうのがいいかも

469 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 19:08:50.48 ID:Gjrul4fP0.net]
>>456
流石に仕事場のPCを勝手に買い替えるのは私には出来ませんし、
最終的にフィルター等の処理は使用せずにかなりの高速化をはかることが出来ました。

この方式が最速ではないかも知れませんが、
今までADO接続でSQLを実施して
2〜3分掛かっていた処理が一瞬で終わるようになったので満足しています。

今まで質問に答えて頂いた方、色々参考にさせていたきました。
ありがとうございました。

470 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 20:15:28.30 ID:WUXZwGEtd.net]
>>454
やはりVBAは不要
オートフィルターのフォント色で絞り込み、subtotal関数で十分



471 名前:デフォルトの名無しさん [2022/03/22(火) 23:22:39.90 ID:VOPCLAbN0.net]
本当にド素人なのでお許し下さい
ここに3枚の請求書(Excelデータ形式)があり、それぞれsheet1、sheet2、sheet3にあります
フォーマットはバラバラで文字や配置が異なります
これをsheet4で「支払日」「取引先名」「取引内容」「税込金額」を一覧表にしたいのです
こういうことはVBAでは可能でしょうか?
可能であれば、難易度はどの程度でしょうか?

*実際には請求書は数百枚あります

472 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 23:26:23.97 ID:b3mXLXMM0.net]
>>463
フォーマットが統一されていれば、vbaでやる意味はある
フォーマットが統一されていない場合、vbaで書く意味がほとんどない。手作業でコピペするのと変わらん

473 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 23:26:42.94 ID:b3mXLXMM0.net]
かわらん、と言ったけど手作業でコピペする方が早いわ

474 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 23:43:05.71 ID:6kcI/g5C0.net]
>>461
そのフィルターが処理するために、
全データをメモリに載せようとするから、メモリ不足でフリーズする

20万件 * 100項目 = 2千万項目, 20,000,000

仮に、1つの項目が1KB とすると、
20,000,000 KB = 20,000 MB = 20 GB

メモリに載せられないから、フリーズする

ファイルの読み込みと同じ。
20GBのファイルを一度に全部読み込めない

部分的な読み込みにしないと無理

例えば、1MBずつ読み込んで処理して、そのデータを捨てるとか。
これなら、1MBしかメモリを使わない

でも、この方法では、全データをソートしたりできない。
自分で実装できないから、結局、データベースを使うしかない

475 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 00:15:35.00 ID:HTP/aspP0.net]
>>461
せめてどうやったかぐらい書けよ

つかエクセルからエクセルブックにADOでSQLとか、余計なオーバーヘッドで遅くなるイメージしかないんだがな
それで高速化できるようなケースがあるのか?

476 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 00:34:00.08 ID:3vbjDh2k0.net]
。。同志達は例の追加された新しい関数の情報つかんでいるよね?
なんだか凄そうな予感

477 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 01:05:25.56 ID:MTKAae3e0.net]
ワークシート関数の追加のニュースなら見たけどVBAにも何か追加されるん?
https://forest.watch.impress.co.jp/docs/news/1395929.html

478 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 05:27:44.59 ID:kSdTSG5d0.net]
>>466
なるほど、一度メモリに全て載せるようにするからフリーズするかのごとく重くなるのですね。
EXCELに割り当てられるメモリがどのくらいなのかは分かりませんが、納得です。
ありがとうございます。

479 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 05:59:20.73 ID:kSdTSG5d0.net]
>>467
最終的にはその重いシートを使用する場合にはADOを使用するのをやめました。
代わりに、>>397の人が教えてくれたような技法を使うようにしました。

正確には本来、プライマリキーが設定されるような最も検索後の件数が少なくなるような項目の列をFindで検索して、
その際に検索された値が入っている行の、別項目で最も値の大きい行を取得し、その行にある情報を取得するようにしました。

ADO接続ではSQLを投げられるのでかなり便利で、作成して扱う部品も統一化し易いのですが、
大量なデータを持つシートを扱う場合、或いは後に大量なデータを持つ可能性があると思われるシートを扱う場合は
都度個別にロジックを作成する必要があるという結論になりました。

480 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 06:08:26.57 ID:+yWQsdmla.net]
>>466
> 仮に、1つの項目が1KB とすると、
どんなデータだよw



481 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 06:19:06.78 ID:kSdTSG5d0.net]
今は完全に個別の処理としてロジックを作成していますが、Findで一番検索後の件数が少なくなる場所を検索する部分は共通部品化出来そうですね。
その内その中で更にどのように抽出するかの部分においては別関数化してリフレクションで呼び出すようにすればその部分だけ個別で行えるような気もするので、
当面の目標はそれになります。

482 名前:466 mailto:sage [2022/03/23(水) 09:27:45.30 ID:znQ4kzdw0.net]
>>466
>仮に、1つの項目が1KB とすると、
>20,000,000 KB = 20,000 MB = 20 GB

1つの項目が100バイトなら、2GB。
これでも、メモリ不足になる

1つのアプリは普通、100MB ぐらいまででしょ?
数百MBも使えるアプリは無いでしょ?

使用メモリの制限を外さないと無理じゃないの?

483 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 09:46:29.99 ID:KFrQJBSS0.net]
メモリの制限に達するとストレージ、仮想メモリ使うよ・・・何を言ってるんだ・・・

484 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 09:50:01.23 ID:MR2jKSYA0.net]
>>474は後で恥ずかしい思いするぞ
それとも過去の人か

485 名前:466 mailto:sage [2022/03/23(水) 11:39:32.08 ID:znQ4kzdw0.net]
Java とか、VM のメモリ不足で落ちるとか?
デフォルトのメモリ割り当て設定が少ないからとか、聞いたけど

各アプリには、そういう設定があるのでは?

486 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 11:43:25.55 ID:KFrQJBSS0.net]
テキトーすぎでは

487 名前:466 mailto:sage [2022/03/23(水) 11:45:19.28 ID:znQ4kzdw0.net]
例えば、2GB のメモリに、Windows 10 をインストールしたら、
1クリックの動作に、1分掛かるので、全く使えない

仮想メモリとか、ほぼ意味ない。
遅すぎる

ドンキの格安PC とかも、そう

488 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 11:49:59.54 ID:KFrQJBSS0.net]
質問者のPCの中身が分からないのになんでどうでもいい豆知識披露してるんだw

489 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 11:50:45.45 ID:nUwfSeaH0.net]
2Gでも1クリックに1分とかはかからないのでは?
win10とそっくりなwin 2019 serverが
2core メモリ1Gでも、
ああもっさりだけどまぁ普通にマウス操作できるなぁ、
ぐらいには動くし。

490 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 12:06:56.65 ID:jxCik/Tkr.net]
句読点の使い方とかからして関わっちゃいけない人だとわかる



491 名前:466 mailto:sage [2022/03/23(水) 12:22:53.98 ID:znQ4kzdw0.net]
CPU がセロリンだからかも

メモリ2GBぐらいのPC は、CPUも安物だから、1クリック1分ぐらい掛かる

492 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 12:52:02.64 ID:bsuIYc5Za.net]
>>474
よくわからないのでExcelでの検証方法と結果を出してくれないか?

493 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 14:41:23.04 ID:3vbjDh2k0.net]
同志達はケッコー上等なパソコン使っているイメージだがどうなの??

494 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 15:29:25.74 ID:TpwnHNL9M.net]
パフォーマンスが必要ならDB使えばいいのよ

495 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 18:26:48.33 ID:PWl/OlCpM.net]
社用PCってのは基本10万未満に抑えないと固定資産化して面倒だからそこまでスペックが高くないんよ
それこそ自社でPC作ってる会社でも未だにメモリ4GB以下だのCore i3だのが当たり前なぐらい

496 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 18:30:41.97 ID:TpwnHNL9M.net]
i3なんて贅沢な

497 名前:421 mailto:sage [2022/03/23(水) 19:13:52.79 ID:kSdTSG5d0.net]
今更i5の1.6Gでメモリ8Gなんて言えない・・・ー

498 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 19:39:45.28 ID:Jy3nut2I0.net]
そのスペックでその程度のデータ処理でそんなに時間がかかるのは明らかに何かがおかしい
確実に変なことをしている

499 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 20:00:19.51 ID:TpwnHNL9M.net]
ADOのExcel Driverなんておもちゃに決まってんでしょ
上っ面の体裁整えただけ

500 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 21:28:40.17 ID:nUwfSeaH0.net]
今のPC平均てi8700 or Ryzen2600くらいじゃないんかいな?
2.4から3.5Ghz の6-12コアあたりが多いやろ。
3-4年前のマシン。

ややいいと4Ghz の12-16コアくらいでしょ。



501 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 22:55:53.13 ID:KFrQJBSS0.net]
SSDかHDDか
問題はここだけだ
変なエクセルファイル作る人は、どれだけPC性能よくてもいずれ詰む

502 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 01:29:04.78 ID:y95b8UUh0.net]
つかアーカイブドライブが大きな1-2T程度のSATASSDで、CやDの2つくらいが500-1TのNVMeなんじゃないの
HDDなんかは半年に一度みるかもなデータでもない限り使わないと思うけどな。
内蔵にHDDなんかあったら存在だけで使ってなくてもめっちゃ遅くなるし。

503 名前:デフォルトの名無しさん [2022/03/24(木) 02:30:52.55 ID:Rmqc3Mmn0.net]
>>494
馬鹿は黙っていればいいのに

504 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 03:16:35.71 ID:ECMUHWnp0.net]
ゲーミングPCの恩恵受けたいです。
派でなキーボードで

505 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 12:17:51.66 ID:vEIStuKr0.net]
20万x100の中から最大値求めたいなら
1万x100ずつ読みだして最大値20個比較するのが一番早いんでねーの?

506 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 13:05:59.63 ID:5Ha8a+Lla.net]
>>497
なぜそれで速くなると思った?

507 名前:デフォルトの名無しくん mailto:sage [2022/03/24(木) 14:49:33.59 ID:MIQ/3HwW0.net]
分割処理は面倒なようで低スペックには限界を回避し優しい

508 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:52:30.97 ID:Z1gVjOVJ0.net]
>>492
事務用PCだとセレロンがせいぜい
そしてエクセルは事務用ソフトやで
データベース扱わせたら即固まる

509 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 16:05:22.00 ID:0iDW3zlua.net]
数年前、外出時にexcelを使うため
windowsタブレット(atom)を、最適化してた
そこそこ使えるんだけど、
たまにすごく遅くなるから原因探ったらmdbにアクセスしてるときだった

510 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 20:19:51.61 ID:ECMUHWnp0.net]
会社はケチだから高級スペッコのパソコンを購入してくれない。
職場の古いデスクよか私物のノーパソの方がサクサク(Ryzen積んだヤツ)



511 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 20:23:26.56 ID:/oHcKJ7o0.net]
うちは全部SSDに変えたよ
i5 2400もサクサク
1万投資するだけでPCが復活するというのに、なんでみんなやらないんだろうな

512 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 21:32:40.98 ID:XNeV8CRo0.net]
儲かっている会社だけじゃないことくらい想像つくだろ

513 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 23:51:54.91 ID:3J8f/LKg0.net]
7年前に買ったi7のLavie。
何かメチャクチャ重いので中見てみたら
メモリが4G。そして当たり前のようにHDD。

メモリは買い換えて16G積んだけど
それでも立ち上げはなぜか遅い。

それ以来もうYAMADA電気では絶対PCを
買わないことを心に誓った。

514 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:16:28.60 ID:XVe+E9v/0.net]
さすがに、HDD は遅いでしょ

515 名前:デフォルトの名無しさん [2022/03/25(金) 01:24:52.38 ID:x94dfbyJ0.net]
>>505
ヤマダ電機は関係なくお前が馬鹿なだけだろ

516 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:25:53.93 ID:jqc8A7wc0.net]
事務員が職場でゲーミングノートなんか使っていたらカオスだね
遊びに見られる

517 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:28:11.57 ID:jqc8A7wc0.net]
つか立ち上がりってメモリよりSSDが大きく関係しているんじゃないの?
過去にウィンドウズスレで詳しい人に教えてもらった。

518 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:40:28.27 ID:p3htVTGSa.net]
どうしてVBAプログラマーって、
コードの内容だけ調べて、

「はい、こうなってこうなって、こうなっています。
 なぜこうなっているのか、これ以上のことに関しては、こちらではわかりません。
 詳しい人に聞いてねー」

となるんだろう。
自分で何も動こうとしないで、
ただ VBE 開いて、コードを日本語訳して、終わり。
それで仕事した気になってるんだから笑っちゃうよ。

519 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:48:43.98 ID:FbSlRBsRa.net]
そういう人はプログラマーとは言わないよ

520 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 02:37:31.54 ID:F54TZ40q0.net]
どういう状況でその回答に至ったかの前提条件がないとそれが妥当な返答である可能性を否定できない



521 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 05:36:38.48 ID:cwXcdCWcd.net]
>>510
ネットや書籍でも人に読ませる気のないコードやつぎはぎだらけでそもそもまともに動かないコード置いてはい終わり。ってのが多いし情報量は多いが質が悪いので質の悪い解釈が更に増えるという悪循環に陥ってる

522 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 06:16:41.66 ID:XWaROYx+0.net]
>>509
正解

>>510
「ルーチンに関しては」詳しい人に聞いてね、だよ
むしろそれ以上なんか答えてほしい事はあるのだろうか

523 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 08:31:08.17 ID:o8BOLFr/r.net]
そら「知らん」からよ
給料の範疇じゃないんだろ

524 名前:デフォルトの名無しさん [2022/03/25(金) 10:34:06.30 ID:1zyB+7jua.net]
>>510
お前が自分で動けばいいんじゃね

525 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 11:22:36.46 ID:ieGzCLlt0.net]
>>437
民族性としか言いようがない。山本七平さんが生涯かけて取り組んだ、
「なぜ我が国はこうも組織づくりと運営ががダメダメで、暴力と数合わせによる実態のないものに陥っていくのか」っていうあれ

526 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:05:26.87 ID:jqc8A7wc0.net]
本当にできる人はネットとか何も見ないでスラスラとコード書ける人だと聞いた。
なかなかいないと思うけど。

527 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:13:20.83 ID:gLxuAzS/r.net]
VBAは大体ググるわ
普段いじらんし構文まで覚えてないし独特な部分も多いし

528 名前:デフォルトの名無しさん [2022/03/25(金) 12:38:22.10 ID:dRfv/AP1a.net]
ググる人はできない人なのかw

529 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:55:56.28 ID:378bs0UD0.net]
>>510
それはVBAに限ったことじゃないよ。
VBA使う人だってモデリングしてクラスの構成やらインターフェースとかどう使って行くか考えてから作る人もいるし、
Javaや.Net使っている人でもその場凌ぎの平べったいコード書く人もいる。

むしろ何がどうなってそのような結果となるのかは、VBAやってる年寄り連中の方が
今ある便利な部品ばかり使うことじゃなく、もっとハードよりな理屈を知ってる人(ついでにCやC++、アセンブラ等も経験している人)が多いだろうから
一概にその理屈では片付くものでもないよ。

530 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 13:23:03.47 ID:rDRC/qkL0.net]
>>510
どう考えてもそれ以上は「プログラマー」の仕事じゃないわけですが

業務分担外の仕事まで無理やりやらせるブラック会社の人ですか?
責任範囲外のことを要請されても困るわけですが



531 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 13:44:09.14 ID:nD4Ua/6EF.net]
会社のパソコンは底辺スペックが
多いからできるだけ配列必須

532 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 14:15:40.45 ID:ogVYp57ed.net]
ここで質問してくる人はプログラマと呼ぶにはどうかと思うスキルだという認識だし
>>510みたいな答え返してくる奴が自分の職場にいたらっていうかこんなやついないけどw

533 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 16:09:31.18 ID:dbWOzFn0a.net]
そもそもどうしてそういうプログラムになっているか、
どうしてそういう条件文になっているか、
わからなければ、
チームリーダーやマネージャーに聞けばわかるかもしれないし、
チームリーダーやマネージャーは、主査に聞けばわかるかもしれない。

主査は、わからなかったとしたら、そういう仕様でやっていると
クライアントに説明できる。

クライアントからオペレーターに問合せが入って、
オペレーターからプログラマーに問合せがきた場合は、
プログラマーとしては、チームリーダーやチームメイトに聞くのが筋。
それをめんどくさがって、コードだけ読んで、条件文を和訳して
オペレーターに回答するだけのプログラマーって、どうなの。

オペレーターからすれば、まさかの異次元回答をくらった思いになる。
そうじゃなくて、こういう場合どう対処すればよいか、
関係者に聞いてほしい、でも関係者

534 名前:がわからないから、
唯一わかっている身近なプログラマーに聞いている。
そういう話だと思うんだけどなあ。

絶対いいたいこと説明できてない。
さすが俺。
[]
[ここ壊れてます]

535 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 16:25:13.86 ID:qqk/wS7c0.net]
前任が作ったコードをよくわからず使っているが、変な挙動があった
VBAかけるやつに聞いてみたら……

だとオレは思うけど

536 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 16:55:04.11 ID:8xCVgHwf0.net]
PGやSEを抱えていない職場で業務改善の一環としてワンオペで誰かが作ったものは仕様書すら作られてない時も少なくない
コーティング規約もないから中身が無法地帯なんてのもあるある

537 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:11:26.32 ID:378bs0UD0.net]
>>525
あー、そういうことね。
でもやっぱりそれはVBAがどうのではないよ。
要件定義、基本設計、詳細設計に携わっていて
仕様を押さえているかだもの。

つまり、>>527の人が言うように
PGと言うよりはSEのお仕事。

そしてここはVBAのスレだから
PGにそういうこというのはお門違いだし
このスレからしてみてもスレ違い。

で、VBAやってる人が仕様を押さえて
いないというのはそれこそ偏見だよ。
むしろちっちゃいツールばかりなんで
押さえ易いしね。

538 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:20:12.47 ID:rDRC/qkL0.net]
>>525
それはオペレーターが直接プログラマーに聞いてるのがおかしい
つか関係者わからんオペレーターがプログラマーならわかるってどんな異次元組織だよ
関係者がわからんからってプログラマーにきいてもわかるわけないだろ

ちゃんとした組織でのプログラマーの仕事と、事務員が片手間にプログラム作ったのと同じ次元で話されてもなぁ

539 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:30:04.98 ID:jqc8A7wc0.net]
ググってもおkなのか良かったわ
必死でヘルプ見て暗記していたのは非効率だよね

540 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:36:57.23 ID:378bs0UD0.net]
>>530
慣れでスラスラ書けるようにはなるだろうけど
どちらかといえばググり力の方が必要だよ



541 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 18:03:42.37 ID:rDRC/qkL0.net]
ググり方というより、公式ヘルプでの確認が大事だと思うんだが
いま公式ヘルプでさえオンラインとかいう時代だからなぁ

まあVBAの文法ていどなら暗記できるけど
エクセルのオブジェクト全部なんて暗記できる奴がいるとは思えん

542 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 18:39:02.37 ID:ogVYp57ed.net]
オペレータがプログラマに聞くって何を?w
知ってる言葉ならべてるだけなのかな

543 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 19:43:12.04 ID:RqRNte220.net]
要求通りの動作をするコードが書ければできるやつだろ
検索しようが、他人に聞こうが何も見ないで作ろうが関係ないよ

544 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:11:44.87 ID:XWaROYx+0.net]
>>534
それだとエラーチェックとかどうでも良くなってしまう
使い捨てのスクリプトならともかく、その言い方はさすがに意識が低すぎる

545 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:12:25.07 ID:/GQ4L54F0.net]
納期を守ってちゃんと動く
結果がすべて
検索だろうがコピペだろうが関係ない

546 名前: []
[ここ壊れてます]

547 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:40:46.85 ID:jqc8A7wc0.net]
さっき会社の上司とたまたまそういう話したけど、やっぱ何も見ないでスラスラとコード書けるヤツいたら貴重だから重宝するって言っていた。
ただ、そういう人ほど初歩的なミスに気がつかないとも。

548 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:44:28.64 ID:ogVYp57ed.net]
>ただ、そういう人ほど初歩的なミスに気がつかないとも。
こんな話はないわ
たまたまそういう人としか仕事してないだけ

549 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:57:16.02 ID:uzupo3Jn0.net]
飯島 彩矢
いいじま よした

550 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:03:49.94 ID:2zbf95kya.net]
>>535
???
要求通りなんだから要求にエラーチェックが入ってたら当然実装するだろ



551 名前:デフォルトの名無しさん [2022/03/25(金) 21:21:49.50 ID:UnnJynAs0.net]
エクセルのクエリで、一つのファイルにある複数のシートから、たとえば1つ目から4つ目のデータ(1000行くらい)を1枚目を1から4、2枚目を5から8に転記していくにはどのような設定でやればいいでしょうか

552 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:22:42.56 ID:8eXyKRPB0.net]
どうしよう、>>541の言っている意味が分からない…

553 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:26:08.92 ID:4vyR1Miw0.net]
おらも分からん

554 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:26:33.02 ID:378bs0UD0.net]
>>537
まぁちっこいツールとかならそうかもね
ある程度大きくなったら後々のメンテナンスのし易さとか、テストの工数をどうやれば減らせるかとか
最初の内に構成練り込んで考えて作るから、いくらスラスラ組めてもその辺がすっぽ抜けてると
後々手を加えるごとに分岐だらけのスパゲッティコードになって行くことが多いんだよね

555 名前:デフォルトの名無しさん [2022/03/25(金) 21:28:20.55 ID:UnnJynAs0.net]
>>542
えーっとですね
例えばシート1の1から4つめにA,B,C,Dってデータがあるとします
シートの1から10まであって、
それを一つのシートの1箇所に横に並べたいんです

556 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:32:43.40 ID:378bs0UD0.net]
>>541
スピード重視でなければこの間からここで色々言われてたADO接続使ってSQLでレコードセットに値取得してそのままシートに貼り付ければいいんじゃない?

ヘッダがいるなら最初から書いとくか、レコードセットから取得するなら別ロジックが必要だけど

557 名前:デフォルトの名無しさん [2022/03/25(金) 21:34:59.71 ID:UnnJynAs0.net]
>>546
単発での処理なのであまりそういう複雑なのは難しいです

558 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:38:14.89 ID:q+5lBwTqM.net]
>>547
こんなこともわからないような馬鹿は手を出すな

559 名前:デフォルトの名無しさん [2022/03/25(金) 21:39:37.46 ID:UnnJynAs0.net]
クエリとかの簡単な操作でデータ整理できないですかね?

560 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:45:45.83 ID:378bs0UD0.net]
>>549
何だろう、クエリってSQLも立派なクエリだよ?
そっちの言ってるクエリの定義が分からない。
アクセスとかにあるあのツールっぽいのを言ってるのかな?



561 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:46:14.94 ID:8eXyKRPB0.net]
普通にマクロの記録使ってシート1の範囲をコピーして
シート2の開始地点で貼り付けたらいいだけじゃないの…

562 名前:デフォルトの名無しさん [2022/03/25(金) 21:47:30.56 ID:UnnJynAs0.net]
そうすると横にデータを並べていきたいので重複していきます
シート全体の数もそのときどきで変わるので

563 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:50:02.56 ID:378bs0UD0.net]
???
どんどん何をしたいのか分からなくなってくるね

564 名前:デフォルトの名無しさん [2022/03/25(金) 21:51:28.75 ID:UnnJynAs0.net]
>>553
簡単に言うと、複数シートにまたがる複数列の1から4列のデータを、
1枚のシートの横に縦の行を順番に並べていきたいのです

565 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:56:14.91 ID:w2X6jrV+0.net]
ズコーッ !

566 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:56:37.17 ID:378bs0UD0.net]
>>554
本当に単純にそれだけなら
2シート目の1〜4列目をコピーして
1シート目に貼り付けたあとに、
貼り付け先の列先を+4して
シート3以降、シートがある分だけそれを
繰り返せばいいんじゃないの?

567 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:57:03.52 ID:qxuRWoIYM.net]
ID:UnnJynAs0と一緒に仕事しなきゃいけない同僚には同情する

568 名前:デフォルトの名無しさん [2022/03/25(金) 21:58:28.35 ID:UnnJynAs0.net]
>>556
そうなると場合によっては数百のシートを手作業でコピーしなければならないので現実出来ではありません

569 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:03:32.99 ID:378bs0UD0.net]
>>558
は?
手作業ってどこから出てきたの?
そういうコードを組めばいいという話をしてるつもりだったんbだけど伝わらなかったかな?

570 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:03:48.41 ID:8eXyKRPB0.net]
手作業でコピーしなければならない んじゃなくて
ループでそれぞれのワークシートを参照 したらいいじゃん
>>556 は 「手作業で」 なんて一言も書いてないよ



571 名前:デフォルトの名無しさん [2022/03/25(金) 22:05:38.52 ID:UnnJynAs0.net]
>>560
どうすればそれができますか?

572 名前:デフォルトの名無しさん [2022/03/25(金) 22:06:11.03 ID:UnnJynAs0.net]
エクセルの方のクエリでは縦に連結されて出てきたのでやり方を教えて下さい

573 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:08:44.67 ID:378bs0UD0.net]
>>562
いや、そもそもそれだけの処理ならクエリなんて必要ないでしょ

574 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:12:12.99 ID:8eXyKRPB0.net]
>>561
Worksheets.Count でシートの数を持ってこれるから
Worksheets(n)  ※nは1始まり  でそれぞれのワークシートを参照できるから
後はループの中で >>556 の言う通り行番号を加算しながら貼り付けするなり参照貼るなりすればできるよ
俺はもうここまで伝えるので限界

575 名前:デフォルトの名無しさん [2022/03/25(金) 22:15:02.86 ID:UnnJynAs0.net]
>>563
すみません、パワークエリのことです
プログラム組んだりとかはできません

576 名前:デフォルトの名無しさん [2022/03/25(金) 22:15:06.77 ID:UnnJynAs0.net]
>>563
すみません、パワークエリのことです
プログラム組んだりとかはできません

577 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:23:46.18 ID:4vyR1Miw0.net]
>>554
もしかしてPower Queryで言うところのマージをしたいの?
複数シートに共通する、keyとなる列が1つあれば出来るけど。

578 名前:デフォルトの名無しさん [2022/03/25(金) 22:39:41.75 ID:UnnJynAs0.net]
>>567
複数シートの配列は同じで、データの内容だけがちがいます

579 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:44:11.29 ID:3hBoOPeGa.net]
>>565
来る板間違えてる

> ローカルルール
> この板はプログラムを作る人のための板です。

こっちへ行け
【Excel】Power Queryを語るスレ【Power BI】
https://mevius.5ch.net/test/read.cgi/bsoft/1571540368/

580 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:44:52.03 ID:4vyR1Miw0.net]
>>568
縦軸となる共通するkey列はなに?
何の順番で行が並んでるの?



581 名前:デフォルトの名無しさん [2022/03/25(金) 22:58:31.64 ID:UnnJynAs0.net]
>>569
ありがとうございます

582 名前:デフォルトの名無しさん [2022/03/25(金) 22:58:38.87 ID:378bs0UD0.net]
なんだ、Power Queryか。
いい機会だからVBAも勉強してってくれ

583 名前:デフォルトの名無しさん [2022/03/25(金) 22:59:53.49 ID:378bs0UD0.net]
Sub hoge()
Dim targetSheet As Worksheet
Dim bottomRow As Long
Dim toPasteColumn As Long
Dim isFirstTime As Boolean

isFirstTime = True
toPasteColumn = 1

With ThisWorkbook
If .Sheets.Count = 1 Then
Exit Sub
End If

For Each targetSheet In .Worksheets
If Not isFirstTime Then
targetSheet.Activate
bottomRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row
targetSheet.Range(targetSheet.Cells(1, 1), targetSheet.Cells(bottomRow, 4)).Copy _
Destination:=Sheets(1).Cells(1, toPasteColumn)
toPasteColumn = toPasteColumn + 4
End If
isFirstTime = False
Next

End With
End Sub

584 名前:デフォルトの名無しさん [2022/03/25(金) 23:02:44.53 ID:378bs0UD0.net]
うん、やっぱりインデントつぶれたね。
これで動くはずなので良ければVBEに張り付けて実施してみて。
最初のA列がキーであることが前提だけども。

585 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:22:2 ]
[ここ壊れてます]

586 名前:2.08 ID:wN9O5mc/0.net mailto: あれ?確かインデント用のツールを紹介してくれている親切な人いたような?
あれ具合良さそう。
[]
[ここ壊れてます]

587 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:30:29.64 ID:3d/IeTqK0.net]
Sub aaa()
  For bbb = 0 To 0
    If ccc = 0 Then
      ddd = eee
    End If
  Next
End Sub

588 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 01:25:30.54 ID:x5oh4kDTa.net]
ツールの利用者から、ツールの改修担当者に問合せがいったんでしょ。

改修担当といっても、前任者から引き継いだだけだから、全ての仕様はわかっていない。
現在の業務にそぐわない仕様があって、エラーが出たから、
利用者が改修担当者に問合せ。

前任者なら「もともとこういう仕様です」と答えれば、
「ああ、それなら業務が変わったから改修が必要だな」と
改修依頼を出せる。

ツールの利用者も着任して間もない人の場合、
業務が変わったのかどうかもわからない。

そういう場合、ソースコードの条件文を日本語にして
回答するのではなくて、
昔から存続しているチームの誰かに聞くのが普通。
それをしないのは職務怠慢。

自分一人で売上を引っ張ってこれていると勘違いしているのかな。

589 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 06:35:02.37 ID:4/mAEYCl0.net]
>昔から存続しているチームの誰かに聞くのが普通。
>それをしないのは職務怠慢。
つまりそれをしないで改修担当者に聞いてるやつが悪いってことだな

590 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 10:14:46.58 ID:p8/YoqyTd.net]
ここって長文で講釈を垂れる人おおいよね
しかもVBAにはまったく無関係という



591 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 12:35:46.08 ID:OVfO91qG0.net]
自力でできないのに調べない、人に聞かない、期待されているのものがつくれないのは できない人 としか言いようがない

592 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 15:44:49.86 ID:wN9O5mc/0.net]
時には長文になるのは仕方ないよ。
丁寧に説明するばそうならね?

上の方で個人名みたいの書いてるアレな人いるけど今の5ちゃんて個人名書いただけでNGじゃなかったか?

593 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 16:02:36.43 ID:1KsbV4Zma.net]
個人名NGの規制ってあるのか?
WindowsやLinux板とかでは機能していないように見えるけど

594 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 17:07:43.61 ID:kCwfN6Gy0.net]
個人名というか個人情報な
通報されたら警察来るかな

595 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 17:58:02.51 ID:wN9O5mc/0.net]
昔バイトしていた居酒屋のマスターが5ちゃんに実名晒されて誹謗中傷書かれていたのを思い出してさ。

596 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 18:09:02.02 ID:Gn2xNTk6p.net]
>>577
> 昔から存続しているチーム
そんなのは跡形もないから

597 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 20:17:20.58 ID:wN9O5mc/0.net]
職務怠慢は言い過ぎでは?
何かしらの事情あるだろうし。

598 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:22:10.99 ID:lmdSWMnfa.net]
dim ki as string
ki = "まあいろんな事情があるよね"
ki = ki & "チームメイトに嫌われていて聞きづらいとか"

dim shou as string
shou = ki
shou = shou & "「こんなことくらいしかわからなくて、すみません」と謝られても"
shou = shou & "お前がそんなことしかわからないことは、百も承知。"
shou = shou & "誰かに回してくれることも見込んでの質問なんだけど、"
shou = shou & "ってね。"

dim ten as string
ten = shou
ten = ten & "プログラマーは基本、自分ひとりで仕事完結して、周りに電話したりメールしたりチャットしたり、"
ten = ten & "という連携は面倒くさがる人が多いからね。"
ten = ten & "コーディングされていないことは、できませんが何か? みたいな"
ten = ten & "職務はここまで。これ以上はできませんが何か?みたいな"

dim ketu as string
ketu = ten & "ロボットみたいな人が多い。"

599 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:52:13.63 ID:4I5liEUu0.net]
何?
この気持ち悪いスレ・・・・・・

600 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:57:27.46 ID:zJILPsYJM.net]
>>587
汚いコードだな、そんな代入の仕方じゃ変数を4つ用意した意味がまったくないじゃん
そういう時は最後に足すんだよ
Dim DeathStory As String
DeathStory = ki & shou & ten & ketu



601 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:58:14.85 ID:zJILPsYJM.net]
>>588
そっ閉じすりゃいいのに、そんなスレに何か書き込んでる時点で同類

602 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 03:21:42.29 ID:hNNvtCzu0.net]
深夜になると定期的に変な書き込みあるよね

603 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 03:29:36.79 ID:/OZccBd9M.net]
>>591
自己紹介かよ!

604 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 07:40:40.82 ID:BqsGdBXW0.net]
>>587
無駄に
変数 = 変数 & 文字列 をやると
その分余計にメモリを使用する。やり直し。

605 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 09:48:21.10 ID:8deA3KtJa.net]
そもそも >>587 だと
"まあいろんな事情があるよねチームメイトに嫌われていて聞きづらいとか「こんなことくらいしかわからなくて、すみません」と謝られてもお前がそんなことしかわからないことは、百も承知。誰かに回してくれることも見込んでの質問なんだけど、ってね。プログラマーは基本、自分ひとりで仕事完結して、周りに電話したりメールしたりチャットしたり、という連携は面倒くさがる人が多いからね。コーディングされていないことは、できませんが何か? みたいな職務はここまで。これ以上はできませんが何か?みたいなロボットみたいな人が多い。"
ってなるし、適宜 vbCrLf 挟めや

606 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:09:59.57 ID:GXS4gvi+M.net]
>>594
読んでないけど読む価値のないレスであることだけは判る

607 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:21:55.52 ID:dieR0oCra.net]
↑ どこを読めばいいのかもわからんアホw

608 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:33:27.62 ID:jqHr+5yx0.net]
最初と最後の行しか読んでないけど
スペースも改行もつかないって突っ込みだって事だけは判る

609 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:56:36.33 ID:hNNvtCzu0.net]
ようは字下げしないと読みにくいって教えてくれたんですね親切な人。

610 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 11:49:34.86 ID:17nxG3290.net]
>>593
そうなのか
賢くなった
でもいつものクセでSQL文はこの式で書いているわ



611 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:17:45.42 ID:CPBl4WFea.net]
>>597
それで十分、てか最後の行読んだらわかるだろ

612 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:19:46.20 ID:CPBl4WFea.net]
>>599
まあ高々数十行位なら気にすることはないよ

613 名前:デフォルトの名無しさん [2022/03/27(日) 12:41:21.31 ID:cPay0R1J0.net]
誰かSalseforceのAPIをVBAでたたく方法わかる人いませんか?
API関連に関して全く無知で、何をどうしていいのか、、、
詳しい人教えてほしいです、、

614 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:52:04.46 ID:dAzXJbreM.net]
字下げや改行なんてVBAでやることじゃない
印刷だろうが電子化だろうが、文書の整形は出力アプリ側に投げるもんだ
リーダー端末の画面サイズやフォントサイズなんて予測できんだろ?

615 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 13:07:11.24 ID:OVREMJced.net]
文書の整形と文書自体を一緒にしてしまうところが悲しい・・・

616 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:11:35.24 ID:hNNvtCzu0.net]
なんでよ?VBAの義務教育編で字下げは真っ先に学習するはずじゃ??

617 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:22:28.69 ID:2Abk94v90.net]
年収1000万のインド人はインデントもコメントもなし
一般人はちゃんとつけよう

618 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:30:10.15 ID:6akgwO9ga.net]
>>602
アクセスするライブラリとAPIリファレンスを掲示してくれたら捗るんじゃね?

619 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:33:41.29 ID:OVREMJced.net]
>>607
APIは変に教えるとよくないと思うから
それを使って何かするような事をしたいなら正式な仕事なりで発注させるべきだと思うぞ
そもそも何もわかってない奴がここで質問してるのもおかしな話だろ

620 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:34:17.13 ID:OVREMJced.net]
スクレイピングもたまに質問するやつがいるけど
それも同じな



621 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:50:20.50 ID:ob1ESvJwH.net]
>>609
VBA でのスクレイピングはイマイチですねえ、動いたり動かなかったりするし、なにかいい方法はないものか?

Function ScrapingAlgoA003(objIE As InternetExplorer, url, keyword As String)
objIE.navigate url
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Dim ReturnValue As Double
Dim div As HTMLDivElement
For Each div In htmlDoc.getElementsByClassName(keyword)
ReturnValue = CDbl(div.innerText)
ScrapingAlgoA003 = ReturnValue
Next div
Set htmlDoc = Nothing
End Function

622 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:02:58.02 ID:jqHr+5yx0.net]
>>600
そうだな
>>597>>595へのレスだ

623 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:18:00.28 ID:7EXZAGuD0.net]
>>610
VBAのスクレイピングは今だとSelenium使ったChromeのスクレイピングが主流なんじゃなかろうか
バージョン合わせるのが面倒だけど安定してるし

624 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:39:07.33 ID:2Abk94v90.net]
Seleniumはほんといいね
IEからxpathで・・・ってやってたのがほんとアホらしくなった

625 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:43:23.36 ID:U13zJWe20.net]
Seleniumは昔インストールしたんだがよくわからず
未だにIEばかり使ってるんだが もうそろそろ切り替えた方がいいのかな

626 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:51:02.70 ID:7EXZAGuD0.net]
昔のSeleniumはChromeの方にも拡張機能入れて…とかだった気がするけど今は事前準備も書くのも凄く簡単になってるね

627 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:59:57.15 ID:2Abk94v90.net]
>>614
100%切り替えた方が良い
ちょっと癖があるけど、cssセレクタ覚えればアホみたいに楽になるぞ
ちなみにXPathはしんどい

628 名前:デフォルトの名無しさん [2022/03/27(日) 20:17:18.33 ID:Df2KiTxu0.net]
質問です。
連想配列に格納した連想配列の値を取り出すには
どうしたらよいのでしょうか?

Dim dicA as Dictionary
Dim dicB as Dictionary

dicB.Add "a",100
dicB.Add "b",100
dicB.Add "c",100

dicA.Add "A",dicB

としたとき、dicAの中のdicB("b")の値を取得したいとき
どうしたらいいのでしょうか。

Debug.print dicA("A").("b")
とかで出せるかと思ったのですが駄目でした。

629 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:19:01.83 ID:uW5IEa4H0.net]
set TikuB = dickA("A")
Tikubi("b") = bibibibibi-----

630 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:22:07.59 ID:EN8vWua40.net]
>>610
For EachなのにIfで条件指定しないのか



631 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:29:11.49 ID:hNNvtCzu0.net]
乳首エロい

632 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:31:09.02 ID:BqsGdBXW0.net]
>>617
よく分からんのだけど、Dictionalyって
型宣言しただけで使えるの?

普通に考えると、
Set dic A = New Dictionaly
Set dic B = New Dictionaly
とか、必要そうに見えるけど。

633 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:33:33.24 ID:BqsGdBXW0.net]
おっと、Dictionalyのスペルが違ってるか
Dictionaryかすまんこ

634 名前:デフォルトの名無しさん [2022/03/27(日) 20:45:16.14 ID:Df2KiTxu0.net]
元の文と違いますが解決しました。
ありがとうございました。

Sub foo()

Dim dicA As Dictionary: Set dicA = New Dictionary
Dim dicB As Dictionary: Set dicB = New Dictionary

Set dicA("A") = dicB

dicA("A")("a") = "test"

Debug.Print dicA("A")("a") 'test

End Sub

635 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 01:22:22.67 ID:LEJNBveMa.net]
("A")

636 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 02:04:12.07 ID:dJWBHkZn0.net]
(:; U: ::)

637 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 07:56:32.13 ID:bggr0gZp0.net]
Selenium Webdriver と、
Chrome の拡張機能・Selenium IDE の2種類ある

638 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 07:57:45.06 ID:W5FkPi4A0.net]
Selenium Webdriver

639 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 12:34:55.90 ID:DkLhkvc4M.net]
ウェブダイバー

640 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 13:29:17.84 ID:9Kb03WZY0.net]
ウェブダイバーはカラオケで歌うぞ



641 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 18:29:52.50 ID:jKre83rL0.net]
>>623
今更だけど
Dim dicA As New Dictuonary
みたいに普通に1命令で設定しなかったのは何故?

642 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 18:47:34.87 ID:2Ad/srHwa.net]
横からだけど
For ...
Dim D As New Dictionary
...
Next
ってやると最初の一回しかNewしないから常に
Dim D As Dictionary: Set D = New Dictionary
ってやる人はいるみたい

643 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 18:55:38.23 ID:jKre83rL0.net]
>>631
いやいや、ループでそれぞれ別インスタンスとして使うにしても、定義は1回でNewするのが複数回で済むでしょ。
例えば上のレスのようにDictionaryにDictionaryを格納する場合でもDictionaryにしまった時点で参照は渡されるんだから消えないし、
その後、Newしてまた渡してやればインスタンスはまた別物として扱われるよね。

644 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 19:07:54.06 ID:AcTRGxgL0.net]
コードで語ればいいのに

645 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 19:46:09.16 ID:W5FkPi4A0.net]
>>630
知らなかっただけじゃないか

646 名前:デフォルトの名無しさん [2022/03/28(月) 19:46:21.63 ID:jKre83rL0.net]
>>633
Sub hoge()
Dim dic1 As Scripting.Dictionary
Dim dic2 As Scripting.Dictionary
Dim itemCounter As Long

Set dic1 = New Scripting.Dictionary
For itemCounter = 0 To 3
Set dic2 = New Scripting.Dictionary
dic2.Add 0, "fuga" & CStr(itemCounter)
dic1.Add itemCounter, dic2
Next

For itemCounter = 0 To 3
Debug.Print dic1(itemCounter)(0)
Next

End Sub

出力結果:
fuga0
fuga1
fuga2
fuga3

dic1の中にdic2を入れてるけど、dic2の変数自体は使いまわし。
dic2はループの中でNewされているけど、dic1の中にそのときの
dic2の参照情報が格納されているため、きちんと別の値が保持される。
つまりはそういうこと。

647 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 19:51:37.75 ID:BH9MBdK/a.net]
↑ こいつは一体何を説明してるんだろう…

648 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 19:53:39.70 ID:nzzJclxc0.net]
みんな教え方バラバラだから質問者が困ってるよー

649 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 20:06:46.75 ID:GBAIeVpDp.net]
>>636
分からないならすっこんでればいいんじゃないかな

650 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 20:07:19.86 ID:jdteRYNZd.net]
実務ではよくある話



651 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 21:12:23.25 ID:DlrSWjY+a.net]
>>637
>>617の質問は解決してるし、>>630
の質問は>>634が一番ありそうだし
困ってる質問者って誰?

>>638
そうだねw

652 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 00:49:06.48 ID:zHBdUnr/a.net]
>>638
うるさい、だまってればいいんじゃないかな

653 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 01:38:58.63 ID:YOHlvasK0.net]
まあ、知らなかっただけって可能性が高いんだが
DimでNewしてるオブジェクト変数はNothingにできないって罠があるからな

そして今更だが、VBAにDictionaryはないぞ、と

654 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 06:28:42.33 ID:z3WwGups0.net]
>>642
nothingに出来ないってどういう事だ?
以下のコード、間違えてるんだろうか

Sub foo()
Dim a As New Collection
Set a = Nothing
End Sub

655 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 07:06:07.15 ID:YJRadFF90.net]
>>643
https://thom.hateblo.jp/entry/2016/09/27/221527

656 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 07:24:06.81 ID:Nk63wsBAa.net]
それをNothingにできないと言うか?

657 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 07:25:09.72 ID:z3WwGups0.net]
>>644
量子論で草
nothingできるけど元に戻る、vbaの狂気を垣間見た気がする

658 名前:デフォルトの名無しさん [2022/03/29(火) 08:16:28.05 ID:JuGZiW1lM.net]
dictionaryって連想配列だろ
VBA的にはマスタの代わりか、重複を避けて集計するぐらいしか使わないイメージ
だからここで問題にされてることってどうでもいい気もするけどなw
>>602
お前の質問に答えられるレベルに人はここにはいないだろw
海外のサイトで質問するほうがいいよ

659 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 08:48:32.13 ID:ZoTD6ZCz0.net]
そもそもVBAのオブジェクト型は参照カウンタ方式だから、Nothingの代入はオブジェクトの破棄じゃないし
破棄の予約とでも言えばいいのかな

システムは予約が入ってるかどうか定期的にチェックして、可能なら破棄する
実際に破棄するタイミングはシステムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる

ところで破棄のアルゴリズムって公開されてる?
あるいは誰かが解析した資料がどっかにある?

660 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 08:57:03.34 ID:91VKkhT6M.net]
カウントゼロで破棄だろ
説明するまでもない



661 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 08:58:53.63 ID:TzrFOdrRd.net]
>>648
トレーシングGCと参照カウントがごっちゃになってるのかな
参照カウントは基本的に参照が外れたら即破棄

662 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 10:42:09.75 ID:YJRadFF90.net]
この辺、VB.Netとかの他言語でCOMオブジェクトの解放とかやってないと想像つきにくいよね。
そういうの知ってても面倒くさいし、サーバーサイドでEXCEL自体ないこともあるから
あの手この手で別の方法使ってEXCELの更新行おうとするよね。

663 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 11:13:32.55 ID:DZfi33jJd.net]
想像というよりやるべき作法をわからずに適当に作るからでは
使ったら解放するものは何か理解していれば間違えないでしょ
適当にここでNothingすればいいやとか思ってるから問題がおきてしまう

664 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 11:35:23.69 ID:4eDRgxgoM.net]
>>602
Salesforce CLIを呼び出してCSV等に出力し、それを読み込めばいい
VBAから直接APIを呼ぶのは自前でパースしなきゃいけなくて面倒だぞ

665 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 12:59:23.02 ID:YOHlvasK0.net]
>>643
Set a = Nothing
のあとに
MsgBox (a Is Nothing)
とかやってみ

問題にしてるのはオブジェクト変数をNothingにできないことで
つまり
Set obj = Checkobj()
If obj Is Nothing Then
みたいなコードがバグるってことなんだが

>>648
インスタンスの解放とか問題にしてないが
破棄の予約ってなんなんだよ
Nothingの代入は単に参照カウンタを減らすだけだぞ
結果カウントゼロなら廃棄される
.Netじゃないし、VBAで
>システムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる
なんてことはないはず

666 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:35:16.03 ID:oJxqSb9ha.net]
>>654
> Set a = Nothing
> のあとに
> MsgBox (a Is Nothing)
> とかやってみ
>>644のリンク先にも書いてあるけどMsgBox にブレークポイントかけてウオッチウインドで見てみ
Nothing にできないことと、Nothing の時に参照されたら New されると言うのは違う

667 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:45:44.59 ID:YOHlvasK0.net]
>>655
ああ、そうだな
オブジェクト変数をNothingにできない

(VBAコードから)オブジェクト変数をNothingとして評価できない
に訂正しとくわ

668 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:49:11.35 ID:DZfi33jJd.net]
>>654
バグるんではなく自分でバグらせてるだけでしょ
Dimで変数を宣言する際にNewを付与するとヘルプのこちらの記載
「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの
新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を
割り当てる必要がなくなります。」
にある通り変数を参照する限りはNothingにすることはできない
(デバッグで変数を参照してしまっても同様)
変数がNothingか判定したいなら素直に宣言の際はNewを使わなければいいだけ
Newをどういうときに使うとコーディング上効果的かわからない、他人が理解

669 名前:ナきないかもしれないなら使わないほうがいい []
[ここ壊れてます]

670 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:53:26.54 ID:/B8eDHF6d.net]
>>656
評価って表現もなんかおかしくない?
Nothingになっていることを確認できない、とか



671 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 14:15:22.73 ID:YJRadFF90.net]
でもこれ、ちょっと怖いよね
Dimの宣言時にNewしてやると、Nothingにしたら次触るとき、インスタンスが設定されていなければ
勝手に新しいインスタンスを設定するなんて
知らなかったら分岐に Is Nothingとか使いそうだし、知ってたら知ってたでSet 〜 As New 〜の代わりに使って、知ってる人じゃなければ分からないような属人化コードわざと書いたり出来るってことだもんね。

.Netとかでも同じような挙動をするのかな?

672 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 14:49:39.05 ID:DZfi33jJd.net]
怖いもなにもヘルプに書いてあることを理解せずに伝えたりそれを聞きかじっただけでやるからでしょ
質問する側も答える側も一部分だけのやり取りしてるのを踏まえて会話しないと事故のもとだよ
まあ事故るのは質問する側だけなんで答える側はそこまで保証できないが

673 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:00:51.71 ID:5Hfxlu6fa.net]
>>657
> 「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を割り当てる必要がなくなります。」

から

> 変数を参照する限りはNothingにすることはできない

と言うのは飛躍しすぎ

問題はそっちじゃなくて

> 「必ずオブジェクトが存在することが保証される (Nothing を設定してオブジェクトが破棄されたとしても、オブジェクト変数を再利用しようとすると、再作成される)」

の方な

ただ個人的には上記の文で「オブジェクトが破棄されたとして」のくだりは余計だと思う
複数から参照されてたらオブジェクト自体は破棄されないから

674 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:09:04.14 ID:DZfi33jJd.net]
Nothingしてもその後に”変数を参照した”らNothingが再作成されたインスタンスに変わるんだからできないと一緒じゃない?
それと変数とオブジェクトを一緒に考えてないか?
自分は
Dim A As Object
Dim B As Object
Set A = XXX
Set B = A
Set A = Nothing
この場合のAの話をしていてXXXで作成したインスタンスの話はしてないよ

675 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:12:01.06 ID:DZfi33jJd.net]
まあどうでもいい話だった無視してくれ
すまん

676 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:23:41.67 ID:YOHlvasK0.net]
>>657
元の話はなぜDimでNewしないって話だから
バグのもとだからやめといたほうが良いという、理由の可能性の一つを挙げてるだけだが

実際知っててもミスることはあるし、しらないとデバッグが困難だからな

677 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:30:09.53 ID:9zoeUatEa.net]
>>662
混同してるのはお前さんの方
Aは変数でオブジェクトじゃないぞ

678 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:31:19.17 ID:YOHlvasK0.net]
>>662
まあ、Nothingにできないは厳密には確かに違う。Nothing代入できるし
Nothingにならないって言うほうが正しいな

このコンテキストでその違いが重要か?とは思うが

679 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:54:16.92 ID:ffasCIjOa.net]
>>666
違いは重要じゃないけど
> Nothingにならないって言うほうが正しいな
と言う明らかな間違いを言い続けるのはどうかと思うぞ… ⇒ >>655

680 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 18:10:12.28 ID:OyTS9aq30.net]
列ではなく、選択した箇所だけを固定したいのですが出来ませんか?



681 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 18:32:44.42 ID:ZoTD6ZCz0.net]
>>666
違う
代入すればNothingになる
その次にアクセスすると、またそのタイミングで自動的にNewされる

682 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 18:52:31.36 ID:DZfi33jJd.net]
各自が想定してるコードが違うんだから言葉遊びにすぎないよ
自分のレスもいまいちだったかもしれんがNothingをセットして終了するならNothingかもしれないが
後続のコードにIs Nothingなり変数の参照があるならそれは結果的にNothingではなくなるのと一緒と自分は思ってるだけ
例に出して申し訳ないが
> Set a = Nothing
> のあとに
> MsgBox (a Is Nothing)
これとかね
自分なりの結論は宣言時にNewは使わないほうが無難

683 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:12:31.97 ID:YOHlvasK0.net]
>代入すればNothingになる
>その次にアクセスすると、またそのタイミングで自動的にNewされる
厳密にはその通り
そんなことは分かったうえで、それをコード上で確認できないから
Nothingにならない と表現したわけで、その表現が間違いらしいですわ

(VBAコードから)オブジェクト変数をNothingとして評価できない
すべての個所をそう読み替えといてくれ

飽きたし俺はこの話はもうこれで終わり

684 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:15:45.64 ID:YJRadFF90.net]
まぁ>>670の言う通り言葉遊びだよね
みんな実際の挙動は理解しての会話になってるみたいだし

685 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:19:18.21 ID:y+mxjJK80.net]
まあオレは今まで知らなかったけどな!

686 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:32:15.47 ID:/IcSX3Pk0.net]
>>644
おれ以外にもthom先生見てる人いたか

687 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 20:35:52.45 ID:TgcL8J/yM.net]
どう見ても最初はわかってなかったやろ
最後にやっと理解できたみたいだけど

688 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 21:25:13.63 ID:YV5lTWI/0.net]
人に優しく行きましょう
それは分かる人に与えられた特権なのです

689 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 05:40:49.56 ID:bXpTryOw0.net]
人生は優しくなるためにある

690 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:23:09.21 ID:0ps204vGM.net]
スマホ手打ちなので誤字等ありましたらすみませんがよろしくお願いします。

rangeを用いた範囲指定でcells(row,columns)の行、列の部分に端数切り上げで数式を入れたいと考えています。
vbaで roundupを用いる時はworksheetfunction.をつける必要があることをネットで知ったのですが、ページによって頭にapplication.をつけてるものとそうでないものが混在しました。有無によってどのような違いがあるのか教えてください。



691 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:47:30.52 ID:06EhkzBAd.net]
数式を入れるのかワークシート関数を使って値をいれたいのかよくわからないけど
後半の質問であればVBA上では動作に違いはないよ
「https://docs.microsoft.com/ja-jp/office/vba/api/excel.application(object)」の
「アクティブ セル (ActiveCell プロパティ) など、最も一般的なユーザーインターフェイス オブジェクトを返すプロパティとメソッドのほとんどは、Application オブジェクト修飾子を指定しないで使用できます。」
と書いてある通り
こういう質問する前にヘルプを見ると知りたい事や知っておいたいいことが書いてる場合もあるし怪しい回答の知識を覚えなくて済むから見る癖つけたほうがいいぞ

692 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:54:37.31 ID:6Q6BE8PxM.net]
>679
ありがとう、参考にします。

693 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 09:15:22.27 ID:p8/VPuFXr.net]
いえいえ

694 名前:デフォルトの名無しさん [2022/03/30(水) 10:25:12.15 ID:otm0Hfbh0.net]
実際に組んでみてうまく行かない場合に調べるとか質問とかしたらいいと思う

695 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 10:38:48.27 ID:xL2+oAob0.net]
ちょっと教えてください
複数のシートを一緒にスクロールして
常に同じ位置に同じ行列が表示させられるような移動方法ってありますか?

例)
シート1〜シート10までをグループ化して
シート1をスクロールして1000行目を頭に表示すると
残りのシート2〜シート10も同じように1000行目を表示している

よろしくお願いします

696 名前:デフォルトの名無しさん [2022/03/30(水) 14:07:54.57 ID:4QxrGADI0.net]
裸の王様がやってきた やってきた やってきたぞ

697 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 19:23:16.04 ID:QNA9H61R0.net]
>>683
いったんアクティブにしていいなら
Application.GotoとかWindow.ScrollIntoViewとかで表示位置は変えられるけど
まあ使い物にならない可能性が高いな

アクティブじゃないシートのスクロール位置を変える方法があるなら俺も知りたい

それかWindow10個作って同時にスクロールにするとか

698 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 19:31:25.53 ID:ljpoek3c0.net]
複数のシートのデータを纏めたシートを作ったらどうかな

699 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 19:32:55.87 ID:2JfZorGz0.net]
スクロールのイベントってないんか
クリックしたセルを同じにするマクロ
なんじゃこりゃ

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Sh.Name = "Sheet1" Then
Sheets("sheet2").Select
Sheets("sheet2").Cells(Target.Row, Target.Column).Select
Sheets("sheet3").Select
Sheets("sheet3").Cells(Target.Row, Target.Column).Select
Sheets("sheet1").Select
End If

End Sub

700 名前:デフォルトの名無しさん [2022/03/30(水) 19:47:16.20 ID:R9seM6Mc0.net]
馬鹿が考えた操作なんて実装しても、所詮馬鹿の馬鹿な発想でしかない



701 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:06:13.73 ID:wN+Ljz7f0.net]
>>687
フォーム内のスクロールバーはイベント取得できるぽい
そういうのでいいならフォーム内スクロールバーに従ってシートをスクロールさせることはできそう

もしくはシート1のスクロールを監視して自分でイベント発行するか

702 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:25:38.10 ID:N270RWsC0.net]
彼女の下のお口から出る糸を、シート(She糸)と呼びます

703 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:25:54.14 ID:2JfZorGz0.net]
>>689
逆にスクロールを実装すればよかったのね
下スクロールを実装したら期待通りの動きになったわ

Sub Macro4()
' Keyboard Shortcut: Ctrl+Shift+P
Windows("Book1 - 1").Activate
ActiveWindow.SmallScroll Down:=30
Windows("Book1 - 2").Activate
ActiveWindow.SmallScroll Down:=30
Windows("Book1 - 3").Activate
ActiveWindow.SmallScroll Down:=30
End Sub

704 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 04:24:20.35 ID:YoVJ22V0M.net]
糸を出す女ってスパイダーガールか

705 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 07:19:21.13 ID:fdMR9HVCM.net]
宗教的な話題になりそうだけど、If文で判定入れてそれ以外の場合は何もしないって処理の時、elseを省く?それとも何も処理をしないって明示するためにelseの中に何も書かない?

706 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 08:08:06.08 ID:AJ0kjIG/a.net]
俺は省く
逆に Select Case の Case Else は必ずつけて何もしなくていいことを明示するコメントを書いておく

707 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 08:13:36.66 ID:YZ/4IsUH0.net]
こういう書き方ってどうにかしてうまくまとめる方法はありますか?


if C=1 then
if B=1 then
if A=1 then
msgbox "メイン処理を実行します"
else
msgbox "A=1じゃなかったので実行しなかった"
else
msgbox "B=1じゃなかったので実行しなかった"
else
msgbox "C=1じゃなかったので実行しなかった"

708 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 08:33:32.40 ID:cX1o4aeta.net]
>>695
If C <> 1 Then
msgbox "C=1じゃなかったので実行しなかった"
Goto Skip
End If
If B <> 1 Then
msgbox "B=1じゃなかったので実行しなかった"
Goto Skip
End If
If A <> 1 Then
msgbox "A=1じゃなかったので実行しなかった"
Goto Skip
End If
msgbox "メイン処理を実行します"
Skip:

Goto 嫌なら Sub に入れて Return とか

709 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 09:19:19.95 ID:qbFmdfWP0.net]
>>695
ネスト深くなるとわかりにくい
処理は簡単な単位でまとめたほうがいい
実行する/しないは一つの単位(success/errorのように)としてまとめたほうがいい

拒否理由="なし"
if c<>1 then 拒否理由="cじゃない"
else if b<>1 then 拒否理由="bじゃない"
else if a<>1 then 拒否理由="aじゃない"

if 拒否理由="なし"
 メイン処理
else
msgbox 拒否理由&"ので実行しません"

710 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 19:02:13.39 ID:qNIRpAbL0.net]
わかりにくいってだけで正常に動作しているならコメントでも書いとけばいいんじゃね



711 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 19:04:18.25 ID:iXF+QXI0M.net]
>>696
do loop 0でブレイク

712 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 10:46:13.39 ID:fjGlq1dk0.net]
>>697
おれもこんな感じだな
Elseifは好きじゃないからSelectCaseかなあ

713 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 12:32:39.80 ID:wbru5aYXa.net]
VBA の Select Case は Case 節に式が書けるから素直に

Select Case True
Case C <> 1
msgbox "C=1じゃなかったので実行しなかった"
Case B <> 1
msgbox "B=1じゃなかったので実行しなかった"
Case A <> 1
msgbox "A=1じゃなかったので実行しなかった"
Case Else
msgbox "メイン処理を実行します"
End Select

がわかりやすいかな

714 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 13:02:04.64 ID:ZSAOoecqp.net]
>>701
俺もこんな感じにするかな
C#とかと違って;で止められないけど
まぁそれはそれとして。

715 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 19:50:51.52 ID:xmwnc1Js0.net]
複数の条件が成り立つ場合の優先度とか気にせんと・・・

716 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 20:08:08.57 ID:rQp/oHNqa.net]
>>703
なんでドキュメント読まないの?

複数の Case 句の expressionlist 式に一致する場合は、最初に一致した句に続くステートメントのみが実行されます。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/select-case-statement

717 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 00:02:19.90 ID:ZgXClf4M0.net]
A=1かつB=1かつC=1だったらXが実行されるって言う事ではないのね
なんかややこしいね(´・ω・`)

718 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 03:01:36.86 ID:J74pUyNp0.net]
俺は中身が1行の時はCaseを1行にまとめる派
Sub Macro()
  Select Case True
    Case C <> 1: errmsg ("C")
    Case B <> 1: errmsg ("B")
    Case A <> 1: errmsg ("A")
    Case Else: MsgBox "メイン処理を実行します"
  End Select
End Sub

Sub errmsg(s$)
  MsgBox s & "=1じゃなかったので実行しなかった"
End Sub

719 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 06:50:49.06 ID:o4u0MtXma.net]
>>706
errmsg の呼出時の括弧は要らないのでは?

720 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 07:52:44.68 ID:6Vj/pyuu0.net]
>>706
こういうふうにはしないほうが良い?

Sub Macro()
  Select Case True
    Case C <> 1: msg ="C"
    Case B <> 1: msg ="B"
    Case A <> 1: msg ="A"
    Case Else: msg= "メイン処理を実行します"
  End Select
End Sub

msgbox(msg)



721 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 08:39:48.32 ID:D1zTFGCZM.net]
そうやって本筋じゃない方へ話題は逸れていく

722 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 09:01:58.41 ID:Uf1/B9Ep0.net]
Subの場合は
括弧を付けるならCallも付ける
Callを付けないなら括弧も付けない
それだけ

723 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 09:05:23.70 ID:r53Jbhkva.net]
>>708
> こういうふうにはしないほうが良い?
うん、それだと C = 2 でテストしたら単に C って表示されるだけだし

724 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 09:06:11.26 ID:6Vj/pyuu0.net]
>>709
今回はどんどん話を膨らませていいよ

725 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 10:18:01.32 ID:spDayutJd.net]
僕が考えた最高のコード
ってやつだろこんな話題にくいつくのもはずいわ

726 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 10:39:12.57 ID:6Vj/pyuu0.net]
>>708は間違いね
こういう風に、メッセージの中だけ変数に入れて最後で表示させるってのはやめたほうがいいでしょうか

Sub Macro()
  Select Case True
    Case C <> 1: msg ="C=1じゃなかったので実行しなかった"
    Case B <> 1: msg ="B=1じゃなかったので実行しなかった"
    Case A <> 1: msg ="A=1じゃなかったので実行しなかった"
    Case Else: msg= "メイン処理を実行します"
  End Select
End Sub

msgbox(msg)

727 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 10:49:41.47 ID:LxaPNz9fM.net]
好きにすればいい

728 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 12:48:35.67 ID:AxYcslms0.net]
>>714
実行しなかったって表示するのに実行しそうだな

729 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 13:26:31.81 ID:mz7mxvwZp.net]
しねーよハゲ

730 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 15:21:18.52 ID:4YOQBH220.net]
お前ら頑張ってるけど
メッセージなんかただの処理サンプルだろうから
>>701が採用されそうだけどね



731 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 15:52:40.85 ID:vYlFEoJTd.net]
実際の仕様でもなんでもない話に採用もクソもないのでは
好きにすればいいはなし

732 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 17:28:53.57 ID:m8vuVm8ra.net]
話題に食いつくのははずいのに批判だけはするんだな
てか、批判しかできないのかなw

733 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 17:42:03.95 ID:6Vj/pyuu0.net]


734 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 23:43:32.11 ID:4aElhsU0a.net]
>>714
最高のコード

735 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 20:06:13.11 ID:k57kmbe60.net]
>>722
End Sub の下に msgbox(msg) があるのに?

736 名前:デフォルトの名無しさん [2022/04/07(木) 20:57:01.15 ID:WZu7hIyw0.net]
やっと書き込めた。
BB2Cが死んでJane Stileとかいうアプリで書き込んでるけど、VBAスレもその煽りかめっきり書き込み減ってるね。

737 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 22:52:18.94 ID:shKfmndDa.net]
>>723
最(もお茶が)高(く噴き出た)のコード

738 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 09:32:33.40 ID:P5V0Axif0.net]
ハイパーリンクで、他のファイルを開こうとすると、警告ダイアログが出ますが、
(「ファイルには、ウイルスやコンピューターに問題を…」)
非表示にできますか?

レジストリでDisableHyperlinkWarningをやっても、ダメでした…。

739 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 09:48:16.01 ID:O75PAQWK0.net]
ユーザーフォームに設置したボタンをクリックすると
Private Sub 〜〜〜_Clickのイベントプロシージャが追加されますが、
このコードの追加位置はどういう基準で決まっていますか?

すぐ隣のボタンのClickの近くに挿入されることもあれば、
結構離れた位置に挿入されることもあります。

740 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 18:32:41.81 ID:DozpoMh4a.net]
質問は一人一つまで。



741 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 19:07:30.71 ID:aNhRPKRk0.net]
>>726
ウイルスでも作っているの?

742 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 19:44:29.30 ID:p3Omju050.net]
エクセルVBAでウイルスを作ることはできますか?
エクセルVBAでAIを作ることはできますか?

743 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 19:49:56.82 ID:0/Kcf5P10.net]
>>726
試してないから出来るか分からんけどディスプレイアラートは?

744 名前:デフォルトの名無しさん [2022/04/08(金) 19:59:37.27 ID:iHtexTHZ0.net]
>>730
直クライアントだからな
余裕で出来る

745 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 20:10:13.83 ID:cwm3b4Q1d.net]
>>730
はい
はい

746 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 20:43:11.43 ID:p3Omju050.net]
>>732
でもおまえウイルスの作り方わからないじゃん

747 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 20:59:12.69 ID:AMkeYZ900.net]
ウィルスの定義は「操作する人が意図しない動作を起こすプログラム」
だから空白のボタン押すと背景の色が変わるとかそんなんでもウィルスです

748 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 21:53:49.35 ID:iHtexTHZ0.net]
やっとBB2Cが使えるようになった
>>734
煽ってもダメ
ウイルスなんて作らないし
作り方だって載せるつもりはないよ

749 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 22:14:19.86 ID:AMkeYZ900.net]
>>736
いやもう作り方載せたって>>735

750 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 22:18:44.47 ID:7fG2FYL40.net]
ヤンキー・ドゥードルが懐かしい



751 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 00:48:37.33 ID:C63TJhml0.net]
AIの定義が明確に定まってないので自己学習して勝手に洗練されていくものもAIだしただのマクロもAI

752 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 00:55:30.60 ID:tyw5ZPAK0.net]
AIは作るものじゃない
育むものなんだよ

753 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 02:28:28.01 ID:FQQX8rtBa.net]
>>736
もうすでにウイルスのソースコード載ってますが?
>>714

754 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 06:04:10.90 ID:+bGajSMm0.net]
任意の列が左端に来るように水平スクロールする方法ってある?
Application.Gotoで左端に寄せてSmallScrollで上下位置を調整してるけど完全な水平スクロールにはならないんだよね

755 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 07:34:48.36 ID:Dec5MFVZ0.net]
With ActiveWindow
.ScrollRow = x
.ScrollColumn = y
End With

756 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 08:12:43.36 ID:+bGajSMm0.net]
>>743
それも試したけど、アクティブセルが変わると数値が変わらない?

757 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 08:52:12.11 ID:+bGajSMm0.net]
任意の列とアクティブセルの列の差を求めればScrollRowで行けるかな?
今度試してみよう

758 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 11:14:24.15 ID:Mfv2lAJId.net]
Sub World()
Dim Abe As Virus
Set Abe = New prime minister
Abe.coin.End(xldown)
Abe.tax.End(xlup)
Abe.wing.End(xlright)
End World

759 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 12:54:27.64 ID:FQQX8rtBa.net]
で、誰かがズームしたりページレイアウト変えたりして、
トラブルの元になると。
ウィンドウ系はいじらない方がいいと
職場のおじいちゃんが言ってた。

760 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 13:45:19.95 ID:6rDUdJJw0.net]
アース、ファイア、ウォータ系の属性のほうがいいかもね



761 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 14:39:59.55 ID:FQQX8rtBa.net]
Excel VBA の Window 関連のオブジェクトって、船に刻して剣を求むって感じ
走っている電車の中から、指で窓ガラスに風景を描くみたいな

762 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 15:26:28.03 ID:+bGajSMm0.net]
さっぱり例えが分からんw

763 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 16:04:42.29 ID:2h0/Yyo40.net]
詩的すぎるだろw

764 名前:デフォルトの名無しさん [2022/04/09(土) 18:41:50.44 ID:8cH1hwr70.net]
>>749
なるほど納得。
納豆食う。

765 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 20:23:31.13 ID:8/Ft6Y7L0.net]
日本人だけど意味がさっぱりわからんw

766 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 22:16:01.68 ID:XcpxlUbda.net]
ごめん失敗したテヘ

767 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 01:02:21.87 ID:tD6svEJl0.net]
ヘッドレスChromeをseleniumやWebdriverなしでどうにかなりませんか?

768 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 19:56:53.98 ID:anoG1hsda.net]
>>755
UiPathおすすめ

769 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 21:59:21.11 ID:Kyp6sDnX0.net]
オブジェクトの代入を同一プロジェクトで使いまわすことはできるでしょうか?

Public ws1 as worksheet
Module1
Sub test1()
Set ws1 = Worksheets("Sheet1")
ws1.Range("A1") = "Test1"
End Sub

Module2
Sub test2()
Set ws1 = Worksheets("Sheet1")
ws1.Range("A2") = "Test2"
End Sub

これを下記のようにできないかな、ということです。

Public ws1 as worksheet
Set ws1 = Worksheets("Sheet1")

Module1
Sub test1()
ws1.Range("A1") = "Test1"
End Sub

Module2
Sub test2()
ws1.Range("A2") = "Test2"
End Sub

770 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 22:26:56.33 ID:p2QF/trT0.net]
なにがしたいのか



771 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 22:56:21.06 ID:7xr/cYmKd.net]
オブジェクトは無理でしょ
Funtionで対応すれば良い

最もそうしない方が良いからデフォで出来ないようになってることは考慮すべきだと思う

772 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 23:25:19.91 ID:9dLPe5470.net]


773 名前:?そもそもワークシートってオブジェクト化されてるんだからわざわざ変数にセットする必要なくない?
対象のシートがコードを書いているファイルにあるなら
Sheet1.Range("A1").Value = "Test1"
で良いでしょ?
[]
[ここ壊れてます]

774 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 23:56:27.01 ID:Kyp6sDnX0.net]
簡略化するためにThisworkbookを省略して書きましたが、実際には
マクロ動作中にほかのブックを触っても大丈夫且つコードがすっきり
するようにSet ws1 = Thisworkbook.Worksheets("Sheet1")のように
しています

少し時間ができたので増築増築でややこしくなったコードを整理している
最中で、複数のプロシージャで使う固定のシートはまとめて変数にセットして
おこうかと思ったのですがFunctionで調べてみます、ありがとうございます

775 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 23:58:43.07 ID:amT3mnzR0.net]
変数を使いまわす(というか広域で使う)のは普通にできる
モジュールレベルでPublic変数定義するだけ
なんならモジュール名で修飾してもいい

ただ、変数の寿命が管理しにくいから、
中身がセットされてないとか、いつの間にか中身が消えてるとかいうことになるかもなw

776 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 00:23:20.44 ID:ccOkbRo70.net]
シートをオブジェクト名で指定すればどのブックを触っていようがそのコードが書いてあるブックから参照すると思うのだけど
>>761 がやろうとしてる事って他のブックのシートを変数に収納したい場合しか使わなくないか?

777 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 02:00:50.12 ID:vEgugssg0.net]
>>763
一部のメソッドでオブジェクト名を省略できないのがあるじゃん
自分がちゃんと理解してないのが原因なのはわかってるけど、構文とかデフォルトのオブジェクトとかいちいち覚えるのが面倒くさいんだわ

778 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 06:30:21.52 ID:j+U2fOIu0.net]
やるならこうか?
init()に色々初期化みたいなものをまとめて、毎回呼び出す

Public ws1

Sub init()
Set ws1 = Worksheets("sheet1")
End Sub

Sub foo()
Call init
Cells(1, 1) = 1
End Sub

Sub foo2()
Call init
Cells(2, 2) = 2
End Sub

779 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 06:46:39.08 ID:da5RcI7d0.net]
汎用性と独立性を確保するなら引数でシートを渡せ

780 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 07:15:19.69 ID:t+9U/8lg0.net]
>>757
初心者がかち当たるあるある疑問だよね。
最初は>>762の言う方法でやってみればいいと思うよ。
もう少しやり込んでくればデバッグし易くするためにモジュールスコープレベルのPrivateな変数をPublicな関数やプロパティでやり取りするようになるんだけどね。



781 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 07:20:31.49 ID:j+U2fOIu0.net]
こういうイメージ?
よく考えたらpublicにする必要性が全くない

Sub init()
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")
Set ws3 = Worksheets("sheet3")
Set ws4 = Worksheets("sheet4")

End Sub

Sub foo()
Call init
ws1.Cells(1, 1) = 1
End Sub

Sub foo2()
Call init
ws2.Cells(2, 2) = 2
End Sub

782 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 07:21:37.35 ID:j+U2fOIu0.net]
と思ったらpublicいるわスコープ他の言語と間違えたわ

783 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 17:42:54.51 ID:oSnOjvyr0.net]
Recordset.openでselect文を実行するとエラーになるけどツールでログに出した物を実行してもエラーにならない時って何が原因?
ダブルクォートは含まれてない
あとはイミディエイトウィンドウに出てくるsqlが変なとこで改行されてるけど関係ないよね?

784 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 17:45:16.76 ID:pq/BAZJoM.net]
シラネーヨ

785 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 19:22:20.07 ID:D2BP6h+A0.net]
742で書いた完全な水平スクロールできたわ

786 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 19:25:18.42 ID:D2BP6h+A0.net]
>>757
Sheet1モジュールに書くだけでは?

787 名前:デフォルトの名無しさん (ワッチョイ c6da-EhK1) mailto:sage [2022/04/12(火) 19:48:28 ID:hYDOb6070.net]
>>770
それだけで答えられるほどエスパーじゃない

788 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 19:58:04.86 ID:t+9U/8lg0.net]
>>770
まず出力されているエラーは何なの?

789 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 20:52:44.19 ID:oSnOjvyr0.net]
ora 00933
sqlコマンドが正しく終了されていません
が出るんだよね

790 名前:デフォルトの名無しさん (ワッチョイ e2da-vtdv) mailto:sage [2022/04/12(火) 21:13:36 ID:cLFsXNmb0.net]
そのままのエラー文でググれば一発で回答出てくるぢゃねーか



791 名前:デフォルトの名無しさん (ワッチョイ e24f-EtAN) mailto:sage [2022/04/12(火) 21:30:37 ID:t+9U/8lg0.net]
>>776
SQLのケツに;付けろってよ

792 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 01:24:31.19 ID:idY8HIbz0.net]
757です、いろいろご意見ありがとうございます
その後考えた結果、シートのオブジェクト名を変数として代入しようとした名前に変えればいいんじゃないかと思いついたんですが問題ないでしょうか

793 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 03:33:56.70 ID:+aMOkW0p0.net]
>>779
シチュエーションにもよるかな。
シート名を変えられてもそのシートを使う前提であればそれでいいんじゃないかな。

その場合、
自ブックのシートであれば
Dim targetSheet As Worksheet
Set targetSeet = 変更後のシートオブジェクト名
みたいに使えるし、

他ブックのシートを扱う場合は
Dim targetSheet As Worksheet
Set targetSheet = ブックオブジェクト.(シートオブジェクト.Name)
みたいに書けば設定出来る。

もっとも、後者の書き方で前者を賄えるから後者だけ関数化してそれを使い回してもいいけどね。

794 名前:デフォルトの名無しさん (ワッチョイ 7b68-xb3m) mailto:sage [2022/04/13(水) 07:03:06 ID:CoVp5Ukt0.net]
>>779
オブジェクト名はやめたほうが良い。あんまり意味が無い
やるなら、シートの内容を変数名にする

ローマ字
set shain_master = sheet("社員マスター")

日本語許容するなら
set 社員マスタ = sheet("社員マスター")

なおベストは英語

795 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:35:12.98 ID:6wqio091M.net]
会社員を英語でなんと言うかがわからんわ

worker(労働者)やemployee(被雇用者)じゃニュアンスが違うしー
辞書なしですぐ出てくるレベルのやつはVBAなんかやってないやろ、という偏見

796 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:37:38.41 ID:CoVp5Ukt0.net]
staffでええやろ

797 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:50:17.55 ID:+aMOkW0p0.net]
>>782
会社員だから
companyEmployeeでいいんじゃね?

798 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:56:48.50 ID:HWn/7Hddd.net]
Google翻訳だとmember
んー、なんかしっくり来ない

799 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:59:18.64 ID:PsKYJxH90.net]
staffは関係者ってイメージ

800 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 08:15:50.97 ID:1kKv9jFRd.net]
staffという単語はcompanyと同義で集団に対して使うって日本人は意外とわかってない



801 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 08:30:55.20 ID:CoVp5Ukt0.net]
employee以外ないだろう

802 名前:デフォルトの名無しさん (スプッッ Sd22-eTSu) mailto:sage [2022/04/13(水) 08:56:08 ID:wBIIYhTid.net]
会社員という表現は英語では難しい
大人しく syachiku か Karoushi_Man にしとけ

803 名前:デフォルトの名無しさん (ブーイモ MM02-CB6w) [2022/04/13(水) 09:04:23 ID:YJgAVhDkM.net]
業務用語の変数は日本語で業務用語そのものを使ってる
中途半端な英語だと誤解しやすいし、ローマ字は読みづらい

804 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:04:01.74 ID:NHlBNLdW0.net]
Accessならお馴染みの「Northwind」のテーブルでは Employee List とか Employee Details
概念としての会社員ではなく、自社の社員リストなので「従業員・使用人」の意で
ま、そのファイルを誰が見る?誰が使う?どこに出す?で適宜に 恥かかない程度で 何だっていいんだろうけれども

805 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:09:02.25 ID:93SXwTUS0.net]
リーマンが和製英語からすでに世界に浸透してる

806 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:28:39.30 ID:Wmi1ga+iM.net]
ワークマン

807 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 11:06:56.09 ID:BozzLOUH0.net]
ワークマンは流行りよ

808 名前:デフォルトの名無しさん (スップ Sd22-2p/j) [2022/04/13(水) 12:58:38 ID:7IxClg8bd.net]
緊急です!

マクロの入ったボタンが図だかイラストになってしまい困ってます。
直し方のアドバイスお願いします。

809 名前:デフォルトの名無しさん (ワッチョイ 6711-LXkm) mailto:sage [2022/04/13(水) 13:07:23 ID:zDnWB3YN0.net]
>>795
https://mevius.5ch.net/test/read.cgi/bsoft/1647570025/342

810 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 13:09:58.08 ID:Wntan1Ql0.net]
こういうの30分一万円無保証とかで稼げないかな



811 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 13:57:45.74 ID:+aMOkW0p0.net]
>>795
もうその図からマクロ実行させちゃえばいいじゃん

812 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 14:00:17.02 ID:uBZa/q6E0.net]
■質問
サウンド再生は何通りかあるけど、
一番遅延が小さい方法は何ですか?

winmmのPlaySound ?

813 名前:デフォルトの名無しさん [2022/04/13(水) 14:08:46.36 ID:6qNApkxLM.net]
>>798
多分それ自体わからんのちゃう?
Excel作った本人とかじゃなく事務員とかだろうし

814 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 15:42:21.02 ID:7cmYTCQn0.net]
3時間くらいかけてVBA作って、合間に別のエクセルファイル開いて、閉じようとしたら
「変更を保存しますか?」って出たので、保存せずに閉じたら。
VBAを作った方のファイルまで変更保存せずに閉じられてしまったーーー!!
どうにかならない?

815 名前:デフォルトの名無しさん [2022/04/13(水) 15:45:55.22 ID:7IxClg8bd.net]
とりあえず顧客に頭を下げてFAXでリスト送って頂いたのでしばらくはなんとかなりそうですがエクセルファイル自体のトラブルについては全員サッパリ意味不明なためどうしようも無さそうです…
(エクセルファイル作った方自身が既に会社にいないのでどうしようもない)

とりあえずエクセルファイルがどうする事もできないため私と社長ら数名は土日も休日出勤して1月から4月までの記録も全部紙ベースの資料に手書きで書き写す事になりそうです

しばらくは紙とペンでのアナログなやり方で回すしかないですがアドバイスくださった方ありがとうございました

816 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 17:20:07.59 ID:SMVlXKyy0.net]
>>801
3時間くらいなら今からやれよ

817 名前:デフォルトの名無しさん [2022/04/13(水) 17:28:47.62 ID:MldHjaMW0.net]
>>802
あちこちマルチで書いて馬鹿かよ
どこかに金を出して頼めよ
ゆとりの馬鹿はこれだから

818 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 17:42:34.06 ID:Wmi1ga+iM.net]
>>801
該当のファイルを開いた状態でファイルタブのどこかにある自動保存云々が書いてある場所を探せ
運が良ければ一時ファイルが残ってる
残ってなけりゃ諦めろ
次からは動作確認をする前に保存する癖をつけるようにするんだな

819 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 19:21:42.96 ID:9TA12m3K0.net]
>>801
これがあるからコーティング中はOneDriveに置いとる

820 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 21:38:12.45 ID:wBIIYhTid.net]
>>805
何で誰でも言える極々普通のアドバイスをこんなに上から目線で言えるんだろう



821 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 21:47:36.66 ID:MBul3VW80.net]
便所の落書きにいちいち目くじら立てて突っ掛かるなよ
より一層老けて見えるぞ

822 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 22:55:33.89 ID:uonj2wEf0.net]
全国10エリアのそれぞれに、2016年度から6か年度分の「各年度集計用book」があり、
中身は1時間値と月合計を集計する等のクエリーが17あって、
これをsheet上のクエリーリストを基に
For Nextで順次更新・上書き保存するVBAを仕込んであります。

これとは別に、各エリアごとにやはりbookのフルパスリストを基に
For Nextで「各年度集計用book」を順次開いて、
中のVBAを実行するよう仕込んだ「各エリア一括更新book」を作りました。
(今さら2016年度を再集計するのは、たまにシレーッと修正が訴求修正が入るため)

これまで10ヶ月間ほどの月次更新では問題もなく動いてきたのですが、今月の更新で
・sheet名とクエリー名によるクエリー更新のステップでデバックエラーで止まった
・2つ目2017年度あたりのbookをVBAで開いたと思ったら、Excelごと落ちた
となり、不安定になりました。

モジュールごと再構成たり、「各年度用集計book」クエリー計算を簡略化して17ステップに削減したりして、
・タスクマネージャーでは動作中のメモリーは最大10GB/32GBくらい、CPU使用率は最大60%弱
・1つの「各年度集計用book」の所要時間に30秒程度
まで軽量化したのですが、今後もbook数が増えることを考えると
何か工夫のしどころはないものかと。

自分で気になっているのは、6か年度分のbook更新がどうにか上手くいっても、
「各エリア一括更新book」のプロジェクトに、
済んだはずの「各年度集計用book」の情報が残っていること。
https://i.imgur.com/BvkH6sr.png
よく分からないけれど、VBAが扱えるインスタンス数を超過しているのか?
これが残っていて良いのか、よくわかりません。

・Set wb = Workbooks.Open で開いて
・wb.Close SaveChanges:=True で上書き保存して閉じているのですが、
・For Next内で済んだ変数はできる限りNothingで開放
していますが、改善の余地はありますか?

823 名前:809 mailto:sage [2022/04/13(水) 23:53:53.55 ID:uonj2wEf0.net]
>>809 タイポ訂正
誤) 訴求修正
正) 遡及修正

824 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 08:48:02.28 ID:jf4kHNax0.net]
>>809

825 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 09:46:20.53 ID:EGNxXvqd0.net]
>>809
マクロを1つの専用ブックにまとめてみたら

826 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 13:25:49.47 ID:E7ePXpuT0.net]
VBAで他ブックのプロシージャを実行したいんだけど、実行まちをなくすことてできる?
Application.Run "Book2!Test2"
を実行したあと、"Book2!Test2"の処理終了を待たずに次の行に移りたいんだが。

827 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 13:53:36.44 ID:TZzbtw0W0.net]
非同期は無理
試してないけど、別のApplicationインスタンスを作成して
そちらでファイルを読み込んで実行とか

828 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 18:58:30.99 ID:RElcaA4D0.net]
メソッドを使い回したいときはクラスを別のクラスに参照渡ししてるんだけど、これってVBAに継承があれば機能的に処理できるのか

829 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 19:03:41.33 ID:sxqTZKvqM.net]
クラスのメンバーに他のクラスを入れるのがマイルド

830 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 19:25:43.40 ID:RElcaA4D0.net]
いいね
それ試してみよう



831 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 20:26:12.03 ID:VI/N1Akx0.net]
>>816
継承を委譲で置き換える、というだけですね…

832 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 21:25:22.08 ID:YCtpuDrNx.net]
参照設定なしでエクセルからアクセスファイルの操作をしようとしているのですが
フィールド定義の構文エラーが出ます。
テーブルの登録数を減らすと通りますが
上限か何かに引っかかっているのでしょうか?

Sub Test()

Dim CN As Object

Set CN = CreateObject("ADODB.Connection")
CN.Open "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" & "C:\Users\Downloads\データ.accdb"
CN.Execute "CREATE TABLE TBL(管理 INT,日付 DATE,番号 INT,内容 MEMO,担当 MEMO,OrderTeam MEMO,Place MEMO,Floor MEMO,GuestNum INT,種別 MEMO,物品 MEMO,対象 MEMO,状態 MEMO,時間1 MEMO,時間2 MEMO,Note MEMO,Total MEMO);"
CN.Close

MsgBox "作成しました。"

End Sub

833 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 21:40:59.88 ID:zMqJUzcEa.net]
MsgBox は、End Sub の外に出して下さい。
このスレの流れ的に。

834 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 22:31:20.84 ID:Ep0kCh050.net]
フィールド名 DATE は?  予約語では?
他には、day、month、table、text、user、when、where、year、zone とかも

835 名前:デフォルトの名無しさん (ワッチョイ e2da-EhK1) mailto:sage [2022/04/14(木) 22:55:38 ID:Ep0kCh050.net]
すまん 読み間違いだった MEMOが多いような気がするが、それも多分外してるな すまん 居ないことにしといてくれ

836 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 23:23:47.63 ID:fL/YN0Wd0.net]
予約後はNote
[]で括れ

837 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 23:41:44.78 ID:kOhvUD5R0.net]


838 名前:解決しました。
感謝です!
[]
[ここ壊れてます]

839 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 14:24:02.27 ID:TsNK8La+0.net]
>>816
クラスになじめなかったくせに

840 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 15:02:32.60 ID:m9CVWFGZ0.net]
う、うるさい!



841 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 10:04:25.26 ID:g0AA3ay0p.net]
無理してクラス使わんでもええんやで

842 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 10:12:12.08 ID:94XVUrLP0.net]
保健室でいいってことか

843 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 10:20:43.39 ID:Xjbe7mxod.net]
特別クラスにさえ入れてもらえないのk

844 名前:デフォルトの名無しさん (ワッチョイ 17da-UOua) mailto:sage [2022/04/16(土) 14:51:07 ID:gJCOre2S0.net]
今は特殊学級は廃止されつつあると聞いたわ
差別に繋がるからだとか

845 名前:デフォルトの名無しさん (ワッチョイ b768-fNw1) mailto:sage [2022/04/16(土) 14:55:23 ID:pYTE49690.net]
>>830
それな

・ひまわり学級導入
 差別だから廃止しろ!

・ひまわり学級撤廃
 障がい者と一緒に授業できるわけねーだろ!分けろ!

これを5年ぐらいの周期でず〜〜〜っと繰り返してる。少なくともここ30年はそう

846 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 15:07:04.56 ID:rh08QZl8a.net]
1年目 ひまわり学級導入
6年目 ひまわり学級撤廃
11年目 ひまわり学級導入
16年目 ひまわり学級撤廃
21年目 ひまわり学級導入
26年目 ひまわり学級撤廃

30年目、ひまわり学級は撤廃された状態

847 名前:デフォルトの名無しさん (ワッチョイ d7da-dJ8g) mailto:sage [2022/04/16(土) 17:39:51 ID:aIa1oxEK0.net]
コールバイネームしたいから無理にクラス使うというのはある。

848 名前:デフォルトの名無しさん (ワッチョイ 17da-UOua) mailto:sage [2022/04/16(土) 18:34:28 ID:gJCOre2S0.net]
自分が通っていた学校の特殊学級は8組て名称だった
6組まではノーマルで何故か7組が無くて8組が特殊だった。

849 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 18:39:26.14 ID:vqf9SIAK0.net]
>>833
何故無理にCallbyName使う必要があるの?
標準モジュールなら普通にApplication.Runじゃダメなの?

850 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 02:09:30.35 ID:BVP+DOJH0.net]
>>835
コールバックのやり方調べた時に、
何か忘れたけど、他は面倒な制約があって、
コールバイネームしか使わなくなった。



851 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 03:28:38.26 ID:N2omx0Taa.net]
たまーに出てくるオブジェクト指向の話。
もうオブジェクト指向なんて忘れたは。

852 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 07:38:47.19 ID:X2S+9pHC0.net]
ワイのコードは素人指向

853 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 09:54:53.72 ID:c23oRZKe0.net]
>>837
それでも知らんうちに使ってるんやで
使ってる奴に意識させないのがオブジェクト指向

854 名前:デフォルトの名無しさん [2022/04/17(日) 10:13:47.49 ID:a3I3T2VGM.net]
excel vbaではオブジェクトを利用したプログラミングにはなるけど、
それだけでオブジェクト指向だとは言えないな

855 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 10:56:37.84 ID:acUYvJMnd.net]
玄人志向が玄人向けだったのは最初だけ

856 名前:デフォルトの名無しさん [2022/04/18(月) 22:09:45.73 ID:dtBLR+IO0.net]
どなたか相談に乗っていただきたいです。
現在、大学の講義で使用するため関数を作成しているのですが、最後に関数に戻り値を入れる際に「代入式の左辺の関数呼び出しは、バリアント型またはオブジェクト型の値を返さなけれななりません。」
とコンパイルエラーが出てしまいます。このエラーはどのように解決したらよいでしょうか?

857 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 22:14:18.56 ID:5XyRTXLN0.net]
コード見ないとちょっときつい

858 名前:デフォルトの名無しさん [2022/04/18(月) 22:20:21.18 ID:JAMU3YD50.net]
コード作成お願いします!

2つのcsvがあってどちらも1列目に主キーがあります。
B:15列目の対応するキーの値を
A:3列目に代入
したいです。

できますかね?

859 名前:デフォルトの名無しさん [2022/04/18(月) 22:25:33.62 ID:dtBLR+IO0.net]
Sub TEST1()
Dim Hight As Double, Time As Double
Hight = 0.4
Time = 2#
MsgBox WaveLength(Hight, Time)
End Sub

Function WaveLength(Hight, Time) As Double

Dim G As Double, PAI As Double
Dim WL0 As Double, WL1 As Double, WL2 As Double

G = 9.80665
PAI = WorksheetFunction.Pi()

WL0 = G * Time * Time / (2# * PAI)
WL1 = WL0

Do While ((WL2 - WL1) / WL1) >= 0.001
WL2 = WL0 * Worksheet.Tanh((2) * PAI * Hight / WL1)
If ((WL2 - WL1) / WL1) < 0.001 Then Exit Do
WL1 = 0.5 * (WL1 + WL2)
Loop

WaveLength() = WL2


End Function

860 名前:デフォルトの名無しさん [2022/04/18(月) 22:26:31.08 ID:dtBLR+IO0.net]
>>845
こういった感じです



861 名前:デフォルトの名無しさん [2022/04/18(月) 22:27:22.86 ID:dtBLR+IO0.net]
VBA自体初めてなので何からしたらいいのかわかっていない状況です。

862 名前:デフォルトの名無しさん (ワッチョイ b768-fNw1) mailto:sage [2022/04/18(月) 22:30:08 ID:5XyRTXLN0.net]
>>845
functionの返り値使いたい時はfunction名に代入すればok。カッコは不要

Sub TEST1()
MsgBox WaveLength(Hight, Time)
End Sub

Function WaveLength(Hight, Time) As Double
WaveLength = 5
End Function

863 名前:デフォルトの名無しさん [2022/04/18(月) 22:41:26.28 ID:dtBLR+IO0.net]
>>848
できました。ありがとうございます。
すみません、もう少し相談させていただいてもよろしいですか?
ループさせる際に値を変化させてDoにもどすことはできますか?

864 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 22:44:42.92 ID:kMWXV8yj0.net]
>>847
本筋と関係ない話だけど、HightとTimeは変数名に使わない方がいいよ
同じ名前の関数が既に存在するからトラブルの原因になる
別の単語か略語を考えて

865 名前:デフォルトの名無しさん [2022/04/18(月) 22:46:49.95 ID:dtBLR+IO0.net]
>>850
小文字一文字とかでも大丈夫ですか?

866 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 22:48:03.57 ID:tZvgKjwbd.net]
それが出来るのがFunctionの良いところよ
戻り値は配列とかに入れておけばok

867 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 22:54:56.92 ID:kMWXV8yj0.net]
>>851
1文字でも動くけど、誰が見ても意味のわかる言葉にするのがマナー
どうしても別の単語を決められなかったら、Height1とかTime1とかにしとけばいい
1文字にするよりはマシ

868 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 23:00:04.07 ID:5XyRTXLN0.net]
マナーってなんだよw
あとで自分が見て分からなくなるのが問題
赤の他人が見てもわかるような名前にしておくと、自分のためになる

869 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 23:00:47.59 ID:5XyRTXLN0.net]
>>849
>ループさせる際に値を変化させてDoにもどすことはできますか?
言ってる意味がよくわからんかった

870 名前:デフォルトの名無しさん [2022/04/18(月) 23:01:50.92 ID:dtBLR+IO0.net]
とりあえず、できました。
Sub TEST1()
Dim hight1 As Double, Time1 As Double
hight1 = 0.4
Time1 = 2#
MsgBox WaveLength(hight1, Time1)
End Sub

Function WaveLength(hight1, Time1) As Double

Dim G As Double, PAI As Double
Dim WL0 As Double, WL1 As Double, WL2 As Double

G = 9.80665
PAI = WorksheetFunction.Pi()

WL0 = G * Time1 * Time1 / (2# * PAI)
WL1 = WL0

Do While ((WL2 - WL1) / WL1) >= 0.001
WL2 = WL0 * Worksheet.Tanh((2) * PAI * hight1 / WL1)
WL1 = 0.5 * (WL1 + WL2)
Loop

WaveLength = WL2

End Function



871 名前:デフォルトの名無しさん [2022/04/18(月) 23:03:04.12 ID:dtBLR+IO0.net]
ただ、まちがっているみたいです。

872 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 23:03:10.61 ID:wKhqv1yX0.net]
>>850
Hight なんていう関数あったっけ?

873 名前:デフォルトの名無しさん [2022/04/18(月) 23:09:31.78 ID:dtBLR+IO0.net]
Doの中でWL2=WL0*tanh(2*PAI*H/WL1)を実行して、((WL2-WL1)/WL1)の絶対値が0.001より小さい場合には関数にWL2を代入して、0.001より大きい場合にはWL1=0.5*(WL1+WL2))と変換して再度Doを行うという繰り返しです。

874 名前:デフォルトの名無しさん [2022/04/18(月) 23:13:08.37 ID:dtBLR+IO0.net]
すみません、わかりにくいですね。
WL1からなる計算式で求められるWL2とWL1の関係が条件に合わない場合、WL1をWL1とWL2の平均をとって再度WL2を求めたいです。

875 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 23:55:22.83 ID:6SbGdBJw0.net]
Do
WL2 = WL0 * Worksheet.Tanh((2) * PAI * hight1 / WL1)
If Abs((WL2 - WL1) / WL1) < 0.001 Then Exit Do

WL1 = 0.5 * (WL1 + WL2)
Loop

876 名前:デフォルトの名無しさん [2022/04/19(火) 05:01:48.08 ID:dRTEe6m5a.net]
どうでもいいが GやPAIは定数として関数の外にだす方が好き

877 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 06:39:40.35 ID:UDMLP6tq0.net]
>>858
cellsのプロパティにある
文脈的に予約後ってコトぐらいwかるだろ

878 名前:デフォルトの名無しさん (ワッチョイ 9f01-0UVf) mailto:sage [2022/04/19(火) 07:20:27 ID:KrqnU+fb0.net]
>>863
Cells w
それを言うなら Range だし、Range にあるのは Height な
そもそも単なるプロパティ名で関数でも

879 名前:予約後でもないし []
[ここ壊れてます]

880 名前:デフォルトの名無しさん (ワッチョイ b768-fNw1) mailto:sage [2022/04/19(火) 07:25:56 ID:UDMLP6tq0.net]
よく見たらhightかよクソがw



881 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 07:48:45.10 ID:muVDZfH30.net]
>>860
ざっくり見た感じだけなので詳しく分からないけどその計算式って正しい?
その計算式の内容と判定条件だと初期値の値によっては計算が収束せずに振動を繰り返すことになるので
ループから脱出できなくなる気がする

882 名前:デフォルトの名無しさん (ワッチョイ bf14-4qoo) mailto:sage [2022/04/19(火) 12:03:50 ID:SIyX6JLR0.net]
Do?Loopの例文見ると条件はWhileが多い気がする
自分はUntil派なんですが

883 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 12:41:24.95 ID:y80OoYXYM.net]
でっていう

884 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 12:53:32.89 ID:Hbe28u0D0.net]
Untilはコーディングミスで「なぜか抜けられない」状態が起きた時の解決がめんどくさいからあんま使いたくない
Whileならコーディングミスっても、値が範囲内でループし続けてるくらいしか原因がないから突き止めやすい

885 名前:デフォルトの名無しさん [2022/04/19(火) 14:33:22.38 ID:XaMNMP/i0.net]
>>869
無能自慢?

886 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 14:38:03.91 ID:Hbe28u0D0.net]
>>870
リスクは減らしたいってだけの話
自分一人だけがマクロいじるとは限らないし

887 名前:デフォルトの名無しさん [2022/04/19(火) 15:06:19.06 ID:XaMNMP/i0.net]
>>871
いや、お前が無能なだけ

888 名前:デフォルトの名無しさん [2022/04/19(火) 15:24:45.82 ID:Cixyrkk96.net]
https://imgur.com/srNrR8t
一応、大学から共有されている理論式がこんな感じなのでおそらく会ってます

889 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 16:03:50.77 ID:NrfRvlTVr.net]
どうでもいいけど、Excelってそういう計算やったほうがいいんだっけ
小数点以下になるようなものは避けたほうがいいって記憶がある

890 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 16:13:18.16 ID:Hbe28u0D0.net]
小数点以下の計算は誤った結果が出ることも結構あるから、
・型はCurrencyにして小数点以下5桁までにする
・可能であれば整数に直してから計算させる
くらいはしておいた方がいいね



891 名前:デフォルトの名無しさん [2022/04/19(火) 16:39:16.39 ID:Cixyrkk96.net]
Function WaveLength(Height1, Time1) As Double

Dim G As Double, PAI As Double
Dim WL0 As Currency, WL1 As Currency, WL2 As Currency

G = 9.80665
PAI = WorksheetFunction.Pi()

WL0 = G * Time1 * Time1 / (2# * PAI)
WL1 = WL0
WL2 = WL0 * WorksheetFunction.Tanh(2 * PAI * Height / WL1)


Do
WL2 = WL0 * WorksheetFunction.Tanh(2 * PAI * Height / WL1)

If Abs((WL2 - WL1) / WL1) < 0.001 Then Exit Do

WL1 = 0.5 * (WL1 + WL2)
Loop

WaveLength = WL2

End Function
とりあえずこういった感じで修正したものの実行するとオーバーフローするみたいです。
何が原因でしょうか?

892 名前:デフォルトの名無しさん [2022/04/19(火) 16:41:24.14 ID:Cixyrkk96.net]
IF条件で抜け出せなくなってしまったとかでしょうか?

893 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 16:59:26.12 ID:Hbe28u0D0.net]
>>876
内容はあまりわかっていないが、できそうな対策から
お察しの通りLoopを抜ける判定が上手く行ってないと推測される
オーバーフロー対策に、書き換え可能であればDoじゃなくてForNextに書き換えたほうがいいかも

Function WaveLength(Height1, Time1) As Double
↑引数は接頭にByValかByRefかを書く 多分ByVal
そして引数の型も明記する 特にTime1はDate型かそれ以外か明記が必要
Dim G As Double, PAI As Double
 ↑どっちもCurrencyでいいかと
Dim WL0 As Currency, WL1 As Currency, WL2 As Currency
G = 9.80665
PAI = WorksheetFunction.Pi()
WL0 = G * Time1 * Time1 / (2# * PAI)
WL1 = WL0
'WL2 = WL0 * WorksheetFunction.Tanh(2 * PAI * Height / WL1)
 ↑ここのWL2はいらない
Do
WL2 = WL0 * WorksheetFunction.Tanh(2 * PAI * Height / WL1)
 ↑HeightはHeight1にする

'If Abs((WL2 - WL1) / WL1) < 0.001 Then Exit Do
'WL1 = 0.5 * (WL1 + WL2)
 ↑ここ2行は↓のように書き換える
 If Abs((WL2 - WL1) / WL1) *1000< 1 Then
   Exit Do
  Else’上の条件を満たしていないときはこの値を代入して処理を続けますよの記載にする
  WL1 = 0.5 * (WL1 + WL2)
  End If
Loop

WaveLength = WL2

894 名前:デフォルトの名無しさん [2022/04/19(火) 17:04:43.35 ID:XaMNMP/i0.net]
馬鹿だからCurrencyを使うのだな

895 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 17:07:08.59 ID:3cTbAnobM.net]
数値計算に固定小数点数のCurrecyは駄目
浮動小数点数のDlubleでないと直ぐにオーバーフローする

896 名前:デフォルトの名無しさん [2022/04/19(火) 17:34:34.65 ID:C02npA8w0.net]
解決しました!!本当にありがとうございます!

897 名前:デフォルトの名無しさん [2022/04/19(火) 17:35:09.38 ID:C02npA8w0.net]
めっちゃ興奮するw

898 名前:デフォルトの名無しさん [2022/04/19(火) 17:37:09.90 ID:C02npA8w0.net]
>>878
ありがとうございます!

899 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 17:44:54.91 ID:Hbe28u0D0.net]
>>883
解決したみたいで何よりです
多分、0.001より小さいかの判定だけがネックだったんだと思う
もし1と比較している理由を教授に訊かれたら「VBAだと小数の計算が正確ではない事象があるため、回避できるように数式を書きました」と答えとき

900 名前:デフォルトの名無しさん [2022/04/19(火) 17:56:52.80 ID:C02npA8w0.net]
>>884
わかりました!
今回は本当助かりました。本当にありがとうございました。



901 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 22:29:37.25 ID:2A4xjXpz0.net]
おー理解できたのなら大学の工機前頑張ってなー

902 名前:デフォルトの名無しさん (ワッチョイ b717-73NO) mailto:sage [2022/04/20(水) 00:08:28 ID:Tl7YCJ+60.net]
double型を使って除算をすると小数点以下の誤差が出る場合があるのはどのように解決したら良いでしょうか
四捨五入では本来算出したい数値からズレてしまいます
currency型なら誤差が発生しない聞いたのですがどうやら馬鹿が使う物らしいので何か別の方法をご教示頂けませんでしょうか

903 名前:デフォルトの名無しさん [2022/04/20(水) 00:24:45.89 ID:TUC465n/0.net]
>>887
馬鹿が悔しくて質問か?
除算で1÷3だったらどうなると思う?

904 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 00:37:19.89 ID:EV0gbz680.net]
>>887
除算した結果をどうしたいのかによる
結果を他の数値と比較したいのなら、比較したい数値に除数を掛けて比較する

905 名前:デフォルトの名無しさん (ラクッペペ MM8f-/HVa) mailto:sage [2022/04/20(水) 02:03:14 ID:HkpFcH5SM.net]
実際のところ除算の丸め誤差が問題になることは少ない
数値計算では有効数字と桁数さえ把握していれば十分な精度で演算できる
というか浮動小数点だろうが固定小数点だろうが四捨五入すれば必ず丸め誤差は発生する
むしろ浮動小数点を扱う場合は桁数の差が大きい数値を加減算する時の情報落ちと、値が近い数値同士を減算する時の桁落ちの方が厄介

906 名前:デフォルトの名無しさん (ワッチョイ b717-73NO) mailto:sage [2022/04/20(水) 02:16:34 ID:Tl7YCJ+60.net]
>>889
分かりにくかったらごめんなさい
・数十行(場合により数百行から千行弱)の作業計画表があってそれぞれ開始日、終了日、工数を作業担当者が決定し、それとは別に納期を設定します
・各行では作業日数を算出し、工数を日割り計算し、小数点第二位で四捨五入、最終日に余りを加算して進捗の計画とします
・作業担当者は日毎に各項目の進捗率を入力します
・作業担当者はこのファイルとは別に上位工程担当者との連絡シートを更新し、そこで発生する追加工数などをこのファイルで読み込みます
・上記データを元に様々な演算を行い、納期に対して進み見込みか遅れ見込みか、またそれが何日の見込みかを算出します
・結果を当初計画、進捗実績および予測、納期などをグラフで可視化

という仕様のツールなのですが2つ目のあたりで余計なズレが発生して演算が狂ってしまう場合があり、
currency型に値を放り込んで強引にズレが生じないようにしているのが現状です
100%発生するのではなく20物件に1件程度の発生率なので如何したものかと頭を悩ませております

907 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 04:15:00.17 ID:i+5dFZiZM.net]
>>891
算数わかる?

908 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 06:42:44.94 ID:PPr2by3tM.net]
>891
2つ目のあたりというのがよく分からないけど箇条書きの2段目の項目のことなら処理の仕方が間違ってる
最後に余りを足すなら途中経過はすべて切捨てで処理、途中経過を四捨五入するなら全ての累積値を最後に被除数から引いて加算値を求める
どちらかで処理しないとズレるのは当たり前

909 名前:デフォルトの名無しさん (ワッチョイ 1701-hfAD) mailto:sage [2022/04/20(水) 07:19:32 ID:Ls68Jrpy0.net]
Currency型てのは誤差が出ないわけじゃなくて精度が固定されてるっていうことなんだけどな
そもそも工程表程度の精度で浮動小数点の誤差が問題になることなんてないだろうに
どうしても誤差が気になるなら割り算を商余で表現するとか演算順序の見直し(割り算を最後に)

910 名前:デフォルトの名無しさん (ブーイモ MMcf-73NO) mailto:sage [2022/04/20(水) 07:23:24 ID:uFaPvbC9M.net]
>>893
余りは工数-日毎工数x作業日数で算出していましたが処理が違いますか?
勿論この場合余りが負の値になる状況もあるので正確には余りとは違う表現をするのが正しいのですが
これで算出した最終日の工数が3.5hになるべきところが3.49999hになるのは計算式の誤りですか?



911 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 07:34:26.59 ID:lCHITGXH0.net]
>>895
最後に小数点以下第二位で四捨五入すればいいじゃん

912 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 07:40:54.07 ID:lCHITGXH0.net]
>>895
どこでどれぐらい誤差が出るかは元データと計算式とデータ型によるから、その情報だけではどこが悪いか判断できない
工数は小数点以下第何位まで入力されてんの?

そもそもデータが1000行しかないんなら別にCurrencyのままでいいじゃん
仕事の目的はプログラミングじゃないんだから、結果がちゃんと出たんなら現時点ではそこで終わっとけ
誤差の処理をちゃんとやうとすると情報サイエンスの基礎をみっちりやらないと無理だから、今回の件とは別に自宅で時間かけて勉強しろ

913 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 07:47:48.41 ID:uFaPvbC9M.net]
>>896
四捨五入した値をdouble型に代入した際にもこの誤差が発生する場合もあったのですがその場合の対処はDoWhileで数値が丸められるまで四捨五入を繰り返す処理を噛ませれば良いですか?
それよりcurrency型に代入した方が処理を省略できるのではないでしょうか
担当者の癖や上位工程担当者の癖、物件の種類などを加味して分析して完了予測を出すためツール全体で2万弱のステップ数があり、可能な限り処理を早めたいです
まぁそんなの誤差の範囲じゃんとかもっと別に短縮出来る所あるだろって言われたらそれはそうってなるんですが

工数は小数点第一位までの入力です

914 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 08:21:13.14 ID:lCHITGXH0.net]
>>898
10進数の0.1は2進数だと循環小数になるんだわ
Doubleは単に桁数が増えるだけで誤差がなくなるわけじゃないから、たぶん根本的に理解が間違ってる

915 名前:デフォルトの名無しさん [2022/04/20(水) 11:58:28.08 ID:TUC465n/0.net]
>>898
そもそも何が問題かわかってる?
コンピュータ(VBA)の割り算では例えば0.999999とかになる問題は常にあることと、有効桁数を常に頭に入れてロジックを組む必要がある
割り算した結果の少数点同士の足し算もできるだけ避ける
小数点以下は一桁と決まってるなら最初から10倍しといて見せる時だけ小数点を付ける
最終的に割り算したら四捨五入する
などなど当たり前のことをわかってないから数値が合わないように見える
こんなの基本だが

916 名前:デフォルトの名無しさん [2022/04/20(水) 12:03:05.91 ID:TUC465n/0.net]
それと、変数や定数、埋め込み数値の型に気を付け、違う型同士の演算ではどういう結果になるかも言語の仕様を常に調べるのは当たり前のこと

917 名前:デフォルトの名無しさん (ワッチョイ ff63-0fbr) mailto:sage [2022/04/20(水) 12:14:09 ID:AAz4B5BA0.net]
>>901
なるほど!さすが

918 名前:物知りですね!
でもここは質問スレだからもう少し人には優しくしてくださいね
[]
[ここ壊れてます]

919 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 12:39:04.97 ID:dxBIrhD/0.net]
プログラムの本質からは外れるけど、現場の工場要員を秒刻みで拘束することに繋がるのを
把握しておくべき 上の方の役員からの指示でのシステム構築なのか、現場の意見を汲んだ
システム化なのかでも変わってくるかも知らんが、古来そういうのは運用し出してから破綻する
相手がロボットならまだしも、自分だって作業を秒刻みで拘束されたら嫌気さすだろうに
システム構築する側の自己満足に過ぎないような無駄なヶ所に注力したところで給料泥棒化するだけ

実際には不良(材料不良・加工不良・落下などの破損・etc)が出たり加工機械の不具合で作業がSTOPしたり
余った時間をバッファに充てるだけじゃ無くて、敢えて余裕をもたせたプランニングを意識しないと
全社員から反発くらって、せっかくの仕事が無かったことにされる 黒歴史の予感しかしない
ロボットやオートメーション機器のためのプログラムだとしたらVBAは間違ってると思うし

920 名前:デフォルトの名無しさん (ワッチョイ 5701-5h/q) mailto:sage [2022/04/20(水) 13:55:16 ID:wuSnjbzX0.net]
>>900
浮動小数点数は特定の桁数の2進数で表現できる数字に丸める表現方法で、10進数の有効桁数は関係ないんじゃ?
そもそも「有効桁数を頭に入れて〜」みたいな正確さを考えて使う型じゃなくて、曖昧で良い場合に使う。

小数同士の演算は(オーバーフローを無視すれば)固定小数点数で問題なく行えるから避ける必要ない。



921 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 13:58:17.02 ID:nqlym3kL0.net]
基本は大事だから
何度でも繰り返しておくんなまし。

922 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 14:12:37.06 ID:2WayYnGs0.net]
質問ですが、
VBAからwebページのデータを取得するとき、
CreateObject("InternetExplorer.Application")とかってやりますが、
サポート終了後はどうなりますか?

Edgeでできる?

923 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 14:45:20.55 ID:W96CmtFuM.net]
>>906
Selenium Webdriver

924 名前:デフォルトの名無しさん (ワッチョイ 5701-5h/q) mailto:sage [2022/04/20(水) 15:54:04 ID:wuSnjbzX0.net]
>>906
当分サポート終了はないけど、そうなったらできなくなる。
Edgeじゃできないから代替案を考える必要がある。

有名なのはSelenium、Chrome DevTool Protocol

前者はライブラリ(参照設定する奴)を利用者全員にインストールしてもらい、
更にブラウザとのバージョン互換性にも対応する必要がある
ただし動作環境はエクセルのみっていうVBA最大のメリットを失う

後者は単独で動作するモジュールが作られてる

VBA以外の言語の開発環境があるなら、
スクレイピング部分はそれで作成してVBAから呼び出すって方法もある。
自分はそうしてるよ

925 名前:デフォルトの名無しさん (ワッチョイ 5701-5h/q) mailto:sage [2022/04/20(水) 15:57:01 ID:wuSnjbzX0.net]
edgeじゃできない、は
CreateObject("InternetExplorer.Application") を使ってedgeを操作できないって意味ね
だからseleniumとかでedgeを操作することになる

926 名前:デフォルトの名無しさん [2022/04/20(水) 16:15:46.15 ID:TUC465n/0.net]
>>904
わからないなら黙っていればいいのに

927 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 16:20:42.29 ID:oDE2bDUYM.net]
固定小数点は格納するたびに四捨五入するようなもんだから誤差の蓄積は多いが
人間社会ではコレをヨシ!としているから問題ない
天文学的な計算では命中しないだろう

928 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 16:26:01.75 ID:2WayYnGs0.net]
>>907
ありがとう。

929 名前:デフォルトの名無しさん (ワッチョイ b72f-mbkD) mailto:sage [2022/04/20(水) 17:45:44 ID:DAsyvBxD0.net]
>>911
>固定小数点は格納するたびに四捨五入するようなもん
もってる精度の桁数を超えない限りそんなことはないわ
想定する桁数内で誤差がでないから固定小数点使うんだぞ
逆に一般的なプログラム言語の浮動小数点は小数以下桁数が浮動する癖に0.1が正確じゃなかったりするから問題なんだよ

930 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 19:09:32.27 ID:cVTwugEg0.net]
0.1は0.1だよ



931 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 19:25:53.48 ID:FB1fQipzM.net]
0.1E+15
桁数は10の15乗の1京
有効数字は1桁の0.1
値は1000兆でも数値は0.1

932 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 19:43:46.55 ID:lF2OJV8Ed.net]
Trunc関数で不要な桁をバッサリ逝けば良いんじゃない?

933 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 20:09:02.82 ID:2WayYnGs0.net]
>>908
ありがとうございます。

iMacrosってのを試してました。

Selenium、Chrome DevTool Protocolを調べてみます。

Excelで入力ダイアログボックスを出して、入力した番号に応じて、そのページのデータを取りに行く、
ってことがやりたいです。

言語はなんでもいいですね。
できれば、Visual Studioを使いたいですが…w

934 名前:デフォルトの名無しさん [2022/04/20(水) 20:56:24.65 ID:by8HP/iQ0.net]
なんだIEEE754仕様問題の話題か。
10進と16進(2進)の浮動小数差異が出るのはまぁある意味仕方がない。
固定小数点の型を持つ言語を使うか、割る前に何桁か分10のべき乗数を掛けて割った後に同じだけ割ってやって適当なところで諦めるか、というところが落としどころだろうね。

ちなみにEXCELの数式の四捨五入は本当に四捨五入だけど、VBAの四捨五入は銀行丸めだから気をつけてね。

935 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 21:03:02.83 ID:lF2OJV8Ed.net]
因みにパワクエも銀行丸め
いい加減統一して欲しいわ

936 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 21:09:55.19 ID:Q+UfmON+0.net]
四捨五入はRound使わなくてもできるらしいで
知らんけど

937 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 21:17:52.87 ID:Me5L26li0.net]
>>906
おれも心配してたけどオートメーションの場合は6月以降も使えるらしいな

938 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 22:25:36.74 ID:DAsyvBxD0.net]
>>918
暗黙の変換(丸め)を四捨五入というのは問題があるかと

939 名前:デフォルトの名無しさん [2022/04/20(水) 23:37:18.06 ID:by8HP/iQ0.net]
>>922
何故に暗黙の変換限定の話と思ったのかは分からないけど、型はなるべく明示的に変換しないとね。
その辺、VBAはOption Strict Onが使えないから大変。
もっとも、.Netでも匿名型を使うメソッドは固めてOption Strict Offに設定したモジュールに突っ込んでおく必要があるけど。

940 名前:デフォルトの名無しさん (ワッチョイ b72f-mbkD) mailto:sage [2022/04/21(木) 17:21:20 ID:pjiVvgnX0.net]
ああ、そうだな。Cxxxで明示的に型変換しても銀行丸めだから
暗黙の変換に限った話ではなかったな

匿名型のくだりは何を言ってるか意味不明だがな
匿名型は名前がついてないだけで厳密に型指定されているんだが



941 名前:デフォルトの名無しさん [2022/04/21(木) 23:11:20.77 ID:VWW2tbiZ0.net]
CcxxとかじゃなくてもRound使ったって普通に銀行丸のだろ

942 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 02:09:40.61 ID:M5fmJ0ze0.net]
ワークシート関数のROUNDは四捨五入
VBAのRound関数は銀行丸め
VB.netのMath.Roundメソッドも銀行丸め
これ真面目な話テストに出るし実務でもトラブルの元だからちゃんと覚えて使い分けろよ

943 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 08:50:16.15 ID:Uci4ALKRM.net]
そもそも四捨五入や銀行丸めは暗黙の(型)変換でも何でもないけどな

944 名前:デフォルトの名無しさん [2022/04/22(金) 12:17:14.78 ID:6grDaRhxp.net]
VBAの四捨五入は型変換でやるもんだと思ってるんだろ

945 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 12:26:05.45 ID:Sb+Ase1ga.net]
VBAで全ての物事を解決したいと考えています。
まずはOCRからやっていきたいです。
次に、人工知能とビッグデータに関する VBA のライブラリを充実させたいです。
それができたら、VBA で、callbyName を使って、疑似マルチスレッド化してサーバーOSを作り、
メタバースを作りたいです。
どうしたらいいですか?

946 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 12:56:56.20 ID:JqjwtZFMr.net]
沢山金がある
→MSに依頼する
少しだけ金がある
→スクールにでも通う
金が無い
→自力で調べろ

947 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 13:46:25.69 ID:qHWul8Ex0.net]
>>929
もう休み始まったのか羨ましいな

948 名前:デフォルトの名無しさん [2022/04/23(土) 07:32:43.48 ID:Q/JWtTUi0.net]
VBAのコードをパスワードではなく
AccessのようにMDEまたはACCDE化して隠蔽できないのかね?

949 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 13:58:03.66 ID:yVxZarCbp.net]
あったとして、ワークシートが見れない

950 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 21:14:41.84 ID:QWCWIiV00.net]
VB6.0の質問となります。
ご存じのかた、ご教授お願い致します。

CommandButton1のDownPictureプロパティ(ボタンを押すと指定したピクチャが表示される)
で設定するピクチャファイルをボタンを押すたびにランダムのピクチャを
表示する方法はありますでしょうか?
ピクチャを固定でなく、可変でいろいろなピクチャを表示することはできるのでしょうか?

宜しくお願い致します。



951 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 21:26:02.35 ID:Owv7WUis0.net]
>>934
可能だけどスレチ
VBとVBAは似てるけどまったく違う言語なのよ
VB専門のスレで聞くか、できるという情報を手がかりにぐぐって

952 名前:934 (ワッチョイ 2590-WvSx) mailto:sage [2022/04/23(土) 21:56:53 ID:QWCWIiV00.net]
>>935
ありがとうございます。
VBスレで聞いてみます。

953 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 03:02:47.88 ID:dQQkhpXr0.net]
なんで.netじゃなくてVB6.0?

954 名前:デフォルトの名無しさん (ワッチョイ a868-g9NX) mailto:sage [2022/04/24(日) 07:12:27 ID:V025dUWC0.net]
聞いてやるな

955 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 08:27:40.38 ID:rcB2xidb0.net]
保守案件じゃねーの?
それより
> VBとVBAは似てるけどまったく違う言語なのよ
のほうが気になるわ

956 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 08:33:51.29 ID:V025dUWC0.net]
VB6とVBAは割りと似てるよ
.netは別物だけど

957 名前:デフォルトの名無しさん [2022/04/24(日) 09:47:15.58 ID:K6J8xSzg0.net]
VB.NetとVBAが違うと言いたかったんじゃないか?
VBAとVB6.0なんてガワ以外大して変わらんだろ

958 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 11:05:42.56 ID:JjYc30D0a.net]
それなら全くスレチって言うわけでもないだろうしVB6以前スレに誘導してもあっちは過疎ってるから>>935の真意がわからん

古代VBプログラマ質問スレ(Ver.6.0 まで) part65 [転載禁止]c2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1440930335/

959 名前:デフォルトの名無しさん [2022/04/24(日) 11:34:19.84 ID:3PCmdv6z0.net]
>>934
配列かコレクションに取りうる画像ファイルのパス全部突っ込んどいて
毎回Rnd関数でランダム添え字作成してDownPictureへ代入する処理を
Timerイベントで定期的に起こせばいいんじゃね

960 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 12:34:51.24 ID:/i/HSWcF0.net]
>934の方法で出来るね
vb.netはCommandButtonというコントロールがないからButtonコントロールで処理することになるけど



961 名前:934 mailto:sage [2022/04/24(日) 14:05:21.06 ID:sOMp0pcl0.net]
>>943
教えていただき、ありがとうございます!
この方法でできました!
助かりました!

>>944
.netは方法が違うんですね。
ありがとうございます。

962 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 14:18:48.53 ID:H35nhyzua.net]
VBAに聞けば、VB6.0の問題が解決すると思ってる魂胆がむかつく

963 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 14:19:17.64 ID:H35nhyzua.net]
次の質問どーぞー!

964 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 14:49:27.80 ID:SWKX3wPR0.net]
>>933
なんでだよ Accessだってオブジェクトはそのまんまだぞ Codeを隠すってだけだ
まあ、Excelでそんなことしたら阿鼻叫喚の地獄絵図がそこら中で起きるだけだろうが

965 名前:デフォルトの名無しさん [2022/04/24(日) 15:00:54.37 ID:awQxKQ/u0.net]
>>945
結局、こういう馬鹿は馬鹿だからこんな書き込みをすることになるんだよな

966 名前:デフォルトの名無しさん (ワッチョイ a868-g9NX) mailto:sage [2022/04/24(日) 19:19:11 ID:V025dUWC0.net]
>>949
そうそう、まさに>>949みたいな感じで

967 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 20:32:26.94 ID:4thwl0KN0.net]
VBAのコードを隠すとかw
いやらしいコードとか胸アツ

968 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 21:56:52.40 ID:HnHBh+4U0.net]
ソースを見たらBase64が書き込まれてるとかかw

969 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 22:10:43.02 ID:qlayZYg40.net]
変数や関数名を1文字にして、インデントをなくし、マルチステートメントを使い、GoToで飛ばしまくる
これぐらいやっとけばニワカには暗号化されてるのと同じに見えるよ
組み込み関数に型文字を付けたり、行番号とか書いとけばさらに混乱するんじゃない?

970 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 22:11:47.35 ID:qlayZYg40.net]
代入のLetを省略せずに書くとか



971 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 22:21:56.70 ID:qlayZYg40.net]
例えばこういうのは初心者だとVBAのコードだと認識できない

Option Explicit
Sub a()
10 Dim i%, s$: For i% = 0# To 15 Step 1&: Let s$ = Hex$(i%): Debug.Print s$,
20 Next i%: GoTo Next_i: Let i% = 999#
30 Next_i: Debug.Print
End Sub

972 名前:デフォルトの名無しさん mailto:sage [2022/04/25(月) 16:32:49.44 ID:mIKR8D/k0.net]
もっと初心者だとこういうもんだと覚えて、ウルトラコード量産して
逆にそれがウケてそこら中から引っ張りだこに成る可能性も

973 名前:デフォルトの名無しさん [2022/04/25(月) 18:25:34.65 ID:d4FCGwAUa.net]
あとどこからも呼ばれないコードを周囲に書いとくとか

974 名前:デフォルトの名無しさん mailto:sage [2022/04/25(月) 22:42:22.33 ID:LL5g/Itw0.net]
難読化してくれるサイトもあるようだがAIでも駆使してんのかよ

975 名前:デフォルトの名無しさん mailto:sage [2022/04/26(火) 13:34:27.36 ID:h7wIW8Sj0.net]
VBを学んでみたいのだけど、専用アプリをインストールすれば良いのですか?

976 名前:デフォルトの名無しさん mailto:sage [2022/04/26(火) 13:39:28.14 ID:4e+J3DaO0.net]
それを聞くようでは勉強進まないと思うぞ
VBAなら、Excelのオプションから設定しよう

977 名前:デフォルトの名無しさん mailto:sage [2022/04/26(火) 13:41:38.59 ID:h7wIW8Sj0.net]
はい!分かりました先輩!

978 名前:デフォルトの名無しさん mailto:sage [2022/04/27(水) 11:18:39.59 ID:13VCBUUL0.net]
VBとVBAは違うだろ

979 名前:デフォルトの名無しさん mailto:sage [2022/04/27(水) 11:35:58.26 ID:5AfXZQ180.net]
めんどくさくなりそうだからその話題はいいわ

980 名前:デフォルトの名無しさん mailto:sage [2022/04/27(水) 12:17:37.70 ID:0nl7nS5l0.net]
ヤフーの質問サイトをたまに見ていると、VB板なのにExcel VBAの質問している方が多いですからね。



981 名前:デフォルトの名無しさん mailto:sage [2022/04/27(水) 14:37:20.10 ID:VQIBBePJ0.net]
これはマイクロソフトが悪い

982 名前:デフォルトの名無しさん [2022/04/28(木) 02:09:14.27 ID:ba7q24a/0.net]
質問と言うわけじゃないんだけど、最近VBAのお仕事が立て込んでて、こねくり回していたら変な現象が起きたのでちょっと報告。

セルのフォーマットを変えても値がそのフォーマットに合わせて変更されず、セルの中身を触ろうとして初めて設定したフォーマットが反映されることがある。
個人的に勝手に「ガラスのフォーマット」と呼んでいるけど、これをVBA上でフォーマットを反映させたいと思い、Cell(1,1).value = Cell(1.1).valueみたいにすれば行けるかなと思ってやってみたら行けたので、
範囲でも行けるかなと思ってRange(“A:A”).value = Range(“A:A”).valueとしてみたら行けた。

調子にのって複数のセル範囲を一度にしてみたら、VBA側ではエラーはなくセルの内容がまばらに#N/Aとなった。
それも何かしら値が設定されていたセルもそうでないセルも関係なくまばらに#N/A。

複数範囲、例えば”A:A,B:B”みたいなのをSplitで「,」で分割してひと範囲づつ行ったら起きなくなった。

まだ詳しくは調べていないし、ヘルプも見ていないけどEXCELのバグと考えるのは早計かな?

983 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 06:30:27.37 ID:4LxgxN/hd.net]
ストゼロのコピペみたいになってるので先ずはExcelの異常より自分の異常を気にした方が良い
お大事に

984 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 06:56:19.59 ID:Xx5H6lJB0.net]
>>966
重い

985 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 07:13:52.33 ID:Nya/6dWlM.net]
うーんこの

986 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 08:23:08.41 ID:tFS3Ff7A0.net]
同一sheet、複数areaの仕様通り

987 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 10:11:30.42 ID:w1n3DLDr0.net]
新人の頃、なんでもやたらバグ!と言い募ってたら、ここの諸先輩にブン殴られた
何でもかでもぜんぶ他者のせいにしてると、モニタから腕が伸びてきてホントにブン殴られる
多分、立て込んでるがキーワード 立て込んでるなら尚更マシン複数台用意して
作業を分散して負荷を軽減するなり、都度都度保存してExcelも終了させておいて
合間にエロ動画見たりしながらExcelさんを休ませてあげないと、テンポる

988 名前:デフォルトの名無しさん [2022/04/28(木) 14:24:22.28 ID:UYKtqYXXd.net]
糖質か

989 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 15:02:24.64 ID:VxUwChyk0.net]
ここ最近、5ちゃん全体が重いのだが?
同志達もそう?

990 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 17:00:23.18 ID:1aSdL/gJ0.net]
>>973
昔から2ちゃん5ちゃんは世界のどこかで紛争が起きるとアクセスが急増したりサイバー攻撃されたりで重くなる
今はロシちゃんウクちゃんのせい



991 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 19:06:07.89 ID:lunnn7Hg0.net]
5chのサーバーはアメリカにある
なんかあるとすぐに攻撃されるからな

992 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 00:10:15.39 ID:xtMjZAZqa.net]
まったく重くないが。
そろそろ次スレよろ

993 名前:デフォルトの名無しさん [2022/04/30(土) 10:32:12.86 ID:lfBpjyTL0.net]
>>976
はぁ?よろじゃねえよ
てめえが立てろハゲ

994 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 10:33:08.68 ID:/k/F8o6k0.net]
よろ~☆ミ

995 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 11:25:04.05 ID:SY9/68Ub0.net]
46497!

996 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 15:57:06.54 ID:jIMADI4Y0.net]
あれ?昔からのしきたりで、スレ主が次のスレ立てを担当するはずでは??

997 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 15:58:48.35 ID:ttNuaWX+d.net]
質問したい奴が立てればいいぐらい
どうでもいいスレだろ

998 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 00:13:28.72 ID:AQA/eAvl0.net]
980番を踏んだ奴が立てるんじゃなかったか

999 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 01:58:03.34 ID:Pk0oKD+E0.net]
建て方知らないもん
アソコの立て方は得意だけどさ

1000 名前:デフォルトの名無しさん [2022/05/01(日) 02:01:11.00 ID:q0kLnjNbd.net]
立てても使い道(相手がいない)がないのになぜ立てるか



1001 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 02:24:06.36 ID:2t63WK/jM.net]
立てたぞ

Excel VBA 質問スレ Part76
https://mevius.5ch.net/test/read.cgi/tech/1651339421/

1002 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 05:51:26.54 ID:QKAZyHTH0.net]
>>985
有能

1003 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 14:10:11.29 ID:X7BfbxUdr.net]
Excel2019になってから重いデータを処理する時にエラーが出やすくなりました。
7000データあるものから鳥瞰図を作成して画像として貼り付ける処理をしているんですがコピーして貼り付ける際にたまにエラーが発生します。(1004データを貼り付けできません)

バッファとして貼り付ける前にwaitで数秒待ってあげるとエラーが出なくなるんですが……
仕方ないんですかね?

1004 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 16:57:37.12 ID:9Zz7qGMa0.net]
エラーをキャッチすれば?

1005 名前:デフォルトの名無しさん (ワッチョイ 2701-XZ6m) mailto:sage [2022/05/03(火) 18:40:38 ID:1FiEgH3Q0.net]
エラー発生時にエラータグにとばしてそこで数秒待って再度実行も試しましたが結局永久ループになってしまいました。

1006 名前:デフォルトの名無しさん (ワッチョイ 075f-erxH) mailto:sage [2022/05/03(火) 18:51:21 ID:wJ2FprYn0.net]
DoEvents入れてみるとか

1007 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 19:57:23.11 ID:1FiEgH3Q0.net]
DoEventsも最初に試しましたがイマイチでした。
あまり同じような症状が出ている方少ないのかな?重い処理だと次の処理が追い越しちゃってエラーが出てる感じなんですよね。

1008 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 23:05:49.83 ID:0jm7qJTo0.net]
Application.ScreenUpdating = False
をやってから処理して、終わったら
Application.ScreenUpdating = True
にしてみたら?

1009 名前:デフォルトの名無しさん [2022/05/04(水) 01:08:45.09 ID:llwekS7n0.net]
>>987
まぁ同期が取り切れていないということで、
コピーが終了したタイミングが取得出来ないと言うことなら待たせるのは仕方ないんじゃないかな?

後続の処理の流れによりけりになるけど、
ある程度時間が経過すればエラーが起きなくなると言うことであれば、それを待たせる時間がもったいないなら
そこで貼り付けはしないで後続処理を進めて、貼り付け自体はタイマーでイベントを起こしてそこで貼り付けの処理すれば時間の節約にはなるかも知れない。
内部的にどんな感じで処理されてるか分からないから後続処理の内容によって待つ時間を増やさなければいけなくなるかも知れないけどね。

1010 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 04:41:51.29 ID:Bmz10qTz0.net]
アドバイスありがとうございます。
Application.ScreenUpdating=Falseはいれています。

やはり仕方無いのですかね?
PCの性能面でも良くないのかも知れません。
メモリーリークのような事が起こっているのでしょうかね?



1011 名前:デフォルトの名無しさん (ワッチョイ 87da-Nh0L) mailto:sage [2022/05/04(水) 06:45:06 ID:XHZmixda0.net]
オブジェクト変数のその都度開放とかは?

1012 名前:デフォルトの名無しさん (ワッチョイ df4f-bbcD) [2022/05/04(水) 07:00:53 ID:llwekS7n0.net]
>>994
メモリーリークというのは
メモリの解放を上手く行えずゴミが溜まったり
本来指すべきメモリのアドレスを
違うアドレスをさして変なアドレスからデータ読んだり
変なところに飛んだりすることを指す訳だけど
話を聞いた限りだとその可能性は低いかな。

強いて言えばコピーする際にクリップボードが
数、あるいは容量的にパンパンで次のコピーを
行おうとしたときにもうコピー出来ない、
またはコピーしようとしているんだけど
空き容量が少なくて、そこで内容を展開しているから
時間が掛かっているとかの類が考えられるかな。

どのくらいコピーペーストしているのか分からないけど、
とりあえずコピーペーストする前かした後に
一回一回、クリップボードをクリアする処理を挟んでみては?

1013 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 07:22:42.23 ID:sN1XYX+fd.net]
Excel2019当方でも同じ
PCの性能が良すぎてExcelの処理が追いついてない感じ
極力クリップボード経由を避ける
どうしても必要なら間にDoEvents - Sleep - DoEvents を入れる

1014 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 07:28:33.66 ID:CsYq7Xth0.net]
>>996
> 本来指すべきメモリのアドレスを
> 違うアドレスをさして変なアドレスからデータ読んだり
> 変なところに飛んだりすることを指す訳だけど
それはメモリーリークとは言いません

1015 名前:デフォルトの名無しさん [2022/05/04(水) 11:56:06.30 ID:ZnBr6fHma.net]
pc買い替え

1016 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 12:08:38.05 ID:7uEIwZovM.net]
1000

1017 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 83日 21時間 44分 6秒

1018 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<282KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef