Excel VBA 質問スレ Part70

■ このスレッドは過去ログ倉庫に格納されています
2021/03/18(木) 22:08:43.71ID:jtngtgXU0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part69
https://mevius.5ch.net/test/read.cgi/tech/1607786543/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/04/23(金) 05:41:22.55ID:IAv7U8Ah0
>>354
すまん。
最初Integerで書こうかなとも思ったんだけど
それだと本当にエラーにならないか自信がなかったんだ。
2021/04/23(金) 05:51:27.06ID:IAv7U8Ah0
手前側のイコールが代入で後ろのイコールが比較演算子だから他の言語だと
A = B == C;
みたいな書き方になったりするのかな
ただVBAではどっちもイコールひとつで分かり辛いから、その辺ちゃんと分かるように書いた方がいいよと言うのが話の趣旨だね
2021/04/23(金) 06:24:58.47ID:TaQs1RgsH
それは文法の話であって論理(式)の話ではないな
途中で混ざってすり変わってる
2021/04/23(金) 06:27:12.51ID:P8K+Jhr50
2021/04/23(金) 06:40:22.74ID:TaQs1RgsH
a=b=cがすべて代入になる言語もあるからややこしいって話だと思うけど
手を抜かずに式を分けたりカッコを付ければいいだけ
コメントを書いたり変数名をわかりやすくするのと同列で、ミスを減らす工夫はプログラマーの義務
すべて代入したい時
b=c
a=b
比較したい時
a=(b=c)
2021/04/23(金) 07:36:07.75ID:F+E5VVCoa
プログラム上の論理式は2値論理がほとんどだから
じっさいは仕様によっていくらでも沢山あるからあるから
そういうのは丁寧にコメントをいくしかない
2021/04/23(金) 09:30:59.30ID:fSz9RP/oa
僕が言ったのは次のようなことです

VBAでいうと、True は -1 だが

Dim i As Long
i = 123
If i = True Then

はイコールと評価される
内部的には CBool(i) = True と評価されているのだと思う

C言語では TRUE は 1 と定義されていて、

int i = 123:
if (i == TRUE) {

では i を暗黙裡に論理型に変換しないので、イコールと評価されない(非0が真である直感に反する)
ということでした(123 と 1 を愚直に比較する)
FALSE は 0 と定義されていて、これは比較に用いてもよい
2021/04/23(金) 09:32:37.82ID:ze7VlHimM
>>359
> 比較したい時
> a=(b=c)
それは…
> a=b=cがすべて代入になる言語
だと、結局代入になるからあまり意味はないよ
2021/04/23(金) 09:32:48.97ID:fSz9RP/oa
間違ってたらごめんなさい
2021/04/23(金) 09:35:24.69ID:fSz9RP/oa
a = b = c = 0
で、a、b、c すべてに 0 を代入したいとか
2021/04/23(金) 09:46:20.67ID:IAv7U8Ah0
>>363
それで合ってるよ
ちなみに-1なのは変数の内容を
ビットとして見たとき全て立っていると
言うことの名残りだって
昔このスレの誰かが言ってた

もっとも今内部的にPコードで
ビットがどれか立っていればって
判断しているかは知らんけど
2021/04/23(金) 09:48:01.57ID:TaQs1RgsH
VBやVBAだと0だけがfalse、それ以外はみんなtrueとみなされる
たとえば
a = 100
If a Then
だとaはtrueになってIfの中が実行される
2021/04/23(金) 12:40:15.83ID:F+E5VVCoa
2値論理はむかし60年から70年台のワイヤーロジック時代にもて囃されたけど
もう令和なんだし、古すぎるよね
80歳のおじいさんならともかく
若い人は使わないようにしましょ
2021/04/23(金) 12:45:24.75ID:F+E5VVCoa
リレーやSWを組み合わせてコンピュータをつくろう

そんなチャレンジャーはいるかな
2021/04/23(金) 14:08:52.13ID:tTrKrHtH0
Falseが0とかいうのは正確には正しくない
Falseを数値として評価すると0というのが正しくて
暗黙の変換を無視して話すとおかしなことになるぞ

Trueが0以外というのはもっと間違ってて
Trueは数値として評価すると-1
0以外の数値をBooleanとして評価するとTrueというのが正しい

型にゆるいというBASICの伝統を引き継いで暗黙の変換って仕様があるせいなんだが
まあ今更その仕様にどうこう言ってもなぁ
2021/04/23(金) 14:38:37.17ID:fkUQFj8fa
結局のところ3ヶ月後の自分がコードの理解ができるかどうかってところよね
2021/04/23(金) 19:44:06.36ID:8NALutx50
別の奴が新しいの作ってるに1ガバチョ
2021/04/23(金) 21:55:04.78ID:TCRfyG2B0
VBAで書くようなコードは変数名をちゃんと書いておけば大体問題ないよ
質問しにくる人のコード見ると、aみたいな意味のない変数名や省略してたりするのが多いんで・・・

VBAってプログラミングの入口になる事が多いので、
妙な向上心から変なテク(特に処理速度関係)を導入しがちだけど、
バカみたいに基本に忠実かつ丁寧にするのがいいと思います。
2021/04/23(金) 21:58:49.34ID:g1z9C06A0
>>370
至言だよな。
2021/04/23(金) 22:02:08.91ID:g1z9C06A0
>>372



仕事で使わされてる「しすてむ」のvba部分のソース開いたらまさに

If c = r/2 then
cc = r/2
rr = r/4
End If

みたいな感じで、しかもノーコメントだったわ。何してるルーチンなのかも
説明なくて読む気になれなかった。
375デフォルトの名無しさん (ワッチョイ a868-8KU9)
垢版 |
2021/04/23(金) 22:29:27.77ID:lNHxMJRv0
色々なデータを引っ張ってきて、加工してピボット作って集計して・・・結局使ってねー!
ってコードを見た時はずっこけた
改修前になにかで使ってたのかもしれないけど
2021/04/24(土) 01:19:16.60ID:zm0BIqCc0
配列を引数にしたときに関数側でVariant()で受け取れないのは何故?
Variantカッコなしなら問題ないんだけど理屈が分からない
2021/04/24(土) 02:14:07.08ID:4BGM8nym0
>>294
カワいい〜
どのコが好みなのよ?
2021/04/24(土) 08:12:03.15ID:nm6+mfpAa
>>370
いいね、
他人がつくったやつを動かんから直してくれ、のほうが多いもんな
でも、直してくれというのはユーザーが居るのだから需要は確実だよな
2021/04/24(土) 08:30:08.06ID:nm6+mfpAa
だから他人のつくったソフトを治すのがけっこう好き
2021/04/24(土) 08:59:02.95ID:hh64S9E70
俺は嫌い
大体人のもの直せって話が降ってくるときは
他の人が見た後で、ぐっちゃぐちゃで
どんだけスパゲティが好きなんだよ、
お前はこの関数に何をやらせたかったんだよ!
みたいのばっかり

そして大概作り直した方が早い
2021/04/24(土) 09:29:33.79ID:B50KhnoE0
早いというか素直に作れる
2021/04/24(土) 09:30:19.42ID:y3ko2vbIM
>>380
おバカ自慢は要らない
2021/04/24(土) 09:44:22.09ID:nm6+mfpAa
www
それをバージョンアップと言うんだよ
2021/04/24(土) 14:07:12.02ID:K1BlKgeMH
言わない、かな
385デフォルトの名無しさん (ワッチョイ 9b5f-APZP)
垢版 |
2021/04/24(土) 16:44:37.66ID:0Etp2+DY0
>>380
スパゲティっていうのはあんたが思っているようなレベルじゃないよ。

GoTo文で前のループのif文の中に飛んだりするのがスパゲティで、いまの時代は解析困難なコードはほぼない。
2021/04/24(土) 16:54:39.75ID:hh64S9E70
後、稀にあるのが
頭にOption Scriptを書かずに変数宣言で型を付けない奴
はぁ?VBScriptですか?JavaScriptですか?
バカなの?死ぬの?
ってなるのもある

後は比較的軽症なんでそんなに文句垂れるほどじゃないんだけど
変数宣言をIfやFor文の中にその括りで書く人
ああ、何かのObject指向言語やってたのね
とはなるけど、その場合あまりスパゲティソースになっていることが少ないので
ある意味少し安心出来る。

後お客さんが自分で作ったけどよく分からないから直して欲しいと言ってくる奴
これは比較的小さいし面白いことが多いから逆にウエルカムのパターン
まず変数名や関数名が日本語の場合が多い。
まぁこれは別にいい。いや、良くはないけど見てて分かるし。
ただその名称が「豚コマ150g」とか「ハウスバー○モンドカレー」とかになっていると
え、夕食カレーだったの?ジャワやゴールデンじゃ駄目なんですか?ってなる
2021/04/24(土) 17:10:21.36ID:hh64S9E70
>>385
そこは認識の違いだね
まぁ別の言語もやってるせいかも知れないけど
俺の中では単一責任原則に沿って作られていない場合、既にスパゲティコードの臭いを感じとって
つらつらと見て行くと5000行くらいの関数とか作っている時点で少しキレ掛かる

俺の中ではFor Nextの中にGoto文で飛ぶことは構造化言語として組むものとして
既に破綻していることを意味している。
その部分は完全に作り直しにするわ。
388デフォルトの名無しさん (ワッチョイ 9b5f-APZP)
垢版 |
2021/04/24(土) 20:41:03.69ID:0Etp2+DY0
そんなレベルじゃ、仕事にならないだろ。
2021/04/24(土) 21:36:02.54ID:rN7nWBsMd
一身上の都合によりIfやForやGoto以下でワザとDimを書く場合もご察しください
2021/04/24(土) 22:10:18.46ID:S/MxMxKT0
vbaやり始めてから世界が変わった
正直関数じゃマジで簡単なの以外はどうにもならんし
下手に複雑な式作っても気まぐれですぐ消されるし
2021/04/24(土) 22:26:59.54ID:4BGM8nym0
そして嫌われるし
2021/04/25(日) 00:02:34.42ID:trooC9Gj0
特にすごいのが他のアプリの操作機能
今まで月に4時間へばりつかないといけなかったのへばり付かないといけなかったの作業が40分で済む
その間することないからスマホいじるか昼食中に動かしても良い
エクセル神すぎん?
2021/04/25(日) 00:03:25.63ID:trooC9Gj0
ごめん誤字


今まで月に4時間へばりつかないといけなかった作業が40分で済む
2021/04/25(日) 01:50:00.98ID:RbwSHn/Ua
可読性ゼロの複雑な関数書いて悦に入ってるヤツは無能
2021/04/25(日) 06:48:34.57ID:rqvjO/ad0
本当の地獄はこれから
2021/04/25(日) 09:13:58.07ID:CqRWqB530
Sub 文字列から日付()
ThisWorkbook.Worksheets("1").Activate
With ActiveSheet
Dim yy As Integer, mm As Integer, dd As Integer
yy = Worksheets("1").Range("A1").Value
mm = Worksheets("1").Range("B1").Value
dd = Worksheets("1").Range("C1").Value
Worksheets("1").Range("B2") = DateSerial(Year:=yy, Month:=mm, Day:=dd)
End With
End Sub

自動でB2の日付が変更するようにしたいのですが
どうしたらいいかわかりません

ActivateではなくChangrイベントだと思いますが
どこにどのように記述したらいいのでしょうか?

ここの先生たちにいつもお世話になってます
初心者にご教授してください
2021/04/25(日) 09:26:59.35ID:4pLy3lS70
ワークシートのDATE関数が手っ取り早い
2021/04/25(日) 10:00:44.54ID:iVVOnnBO0
そもそも文字列を即日付に変換するぐらいなら最初から日付を入力するようにしてたほうが面倒くさくなくていいと思うが
2021/04/25(日) 10:04:58.97ID:CqRWqB530
DATE関数?
=DATE(A1,A2,A3)
↑これですか?

やってみたのですが、なぜか自動計算されないときがあったので

ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ
もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ

日付1から日付2までの期間のすべての日付をD1〜D999に表示したいのですが
初心者過ぎてむずかしいです
2021/04/25(日) 10:15:36.34ID:eytlE9OXa
>>399
閏年が大変だな
2021/04/25(日) 10:23:41.87ID:CqRWqB530
D999としてますが実際はD7ぐらいしかつかわないので
閏年は考慮しなくても大丈夫です
2021/04/25(日) 10:27:00.72ID:trooC9Gj0
注意
標準モジュールではなくお目当てのシートモジュールに記載すること
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:C1")) Is Nothing Or Target.Cells.Count > 3 Then Exit Sub
Application.EnableEvents = False
Dim yy As Integer, mm As Integer, dd As Integer
yy = Range("A1").Value
mm = Range("B1").Value
dd = Range("C1").Value
Range("B2") = DateSerial(Year:=yy, Month:=mm, Day:=dd)
Application.EnableEvents = True
End Sub
2021/04/25(日) 10:28:07.28ID:trooC9Gj0
あ、ごめんこれ違うわ
2021/04/25(日) 10:32:09.85ID:trooC9Gj0
ユーザーフォームは経由は処理が面倒だしエクセルいま手元にないから検証が俺には無理だわ
ただのシート経由ならまだ行けるけど
2021/04/25(日) 10:36:16.85ID:trooC9Gj0
あとB2への処理がすでに日付と月の入力で重複しとるやん
どうしろと
初心者ならユーザーフォームなんてクソ面倒なもの
使わないほうがいいと思うけど
2021/04/25(日) 10:39:05.26ID:4pLy3lS70
>>399
とりあえずこんな感じかなあ
変数宣言は省略

日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)

For day = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = day
Next d
2021/04/25(日) 10:40:46.57ID:4pLy3lS70

Next d ×
Next day ○
2021/04/25(日) 10:42:21.10ID:trooC9Gj0
For d = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = d
Next d
2021/04/25(日) 10:49:18.11ID:trooC9Gj0
修正

columns("d").clearcontents
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For d = 日付1 To 日付2
R = R + 1
Cells(R , "D").Value = d
Next d
2021/04/25(日) 10:58:25.82ID:CqRWqB530
>>406
アドバイスありがとうございます!
初心者なのですが業務上ユーザーフォームを使わなければならなくて(泣
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 日付1 As Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)

For day = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = day
Next d

End Sub

↑こんな感じでしょうか?初心者すぎて変数宣言とかむずかしいです
2021/04/25(日) 11:09:05.98ID:trooC9Gj0
まずあの上の命令はWorksheet changeじゃなくてユーザーフォームに書き込む
ユーザーフォームを作らないといけないけど、適当に欄作って
その空欄へ
a1からc2の内容をすべて転記しないといせない
ユーザーフォームの変更があったら逆にa1-c2へ反映

その上で入力用のユーザーフォームをどうにかして表示するところからスタートだね
絶対面倒くさい
2021/04/25(日) 11:14:02.50ID:CqRWqB530
ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ
もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ

日付1から日付2までの期間のすべての日付をD1〜D7に表示したいのですが
初心者過ぎてむずかしいです

↑ユーザーフォーム経由じゃなくても
上記のようなエクセル表を作りたいのですが
簡単な方法ありますか?
2021/04/25(日) 11:14:40.82ID:4pLy3lS70
>>410
全部Long型で宣言しないと
あとはこれも宣言する
Dim day As Long
Dim R As Long

そしてNext dayに直す
2021/04/25(日) 11:16:40.69ID:trooC9Gj0
変数名がdayだとvbaの標準命令のday(シリアル値)とかぶるからエラー起こさない?
2021/04/25(日) 11:25:35.70ID:kagSPvTda
予約語じゃなく関数名だから大丈夫じゃないかな
ただ、関数を書いたときに頭文字が小文字になったり嫌だから避けるかな
2021/04/25(日) 11:39:20.76ID:4pLy3lS70
>>414
あーそういう心配もあるのね
分かりやすく書いたつもりなんだけど
2021/04/25(日) 11:40:49.20ID:kagSPvTda
試してみると、同一スコープ内だと
Dim day As Long
day = VBA.day(Now())
Debug.Print day
のように関数名を修飾しないとでした
当たり前か
2021/04/25(日) 12:09:23.12ID:CqRWqB530
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)

For day = 日付1 To 日付2
Dim R As Long

R = R + 1
Cell(R , "D").Value = day
Next day

End Sub

こんな感じでしょうか?
2021/04/25(日) 12:12:35.21ID:eytlE9OXa
変数に日付1とかやるならdayも日付でよくね
2021/04/25(日) 12:36:35.37ID:CqRWqB530
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)

For day = 日付1 To 日付2
Dim R As Long

R = R + 1
Cell(R , "D").Value = day
Next day

End Sub

Changeしたいシートに記述してみたんですけど構文エラーになりました
2021/04/25(日) 12:41:57.46ID:trooC9Gj0
適当にってのは自分で好きな変数に書き換えろってことだぞ…
あとapplication.enableevents=falseにしないと無限ループになるぞ
処理後はtrue
あとdimをループの中に入れないで
詳しくはググって
2021/04/25(日) 12:43:38.04ID:trooC9Gj0
あと
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub

こういうようなのを冒頭に入れないと、どこに何を入れても命令が実行されるから遅くなる
2021/04/25(日) 12:59:50.89ID:kagSPvTda
結果として上手くいっているのかもしれないけど、
R がループ内で宣言されていると、毎回初期化を期待しているみたいでイヤですね
この場合、R の宣言はプロシジャの先頭にあるものとみなされるのだろうけど
2021/04/25(日) 13:05:39.55ID:CqRWqB530
Private Sub Worksheet_Change(ByVal Target As Range)
application.enableevents=false
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(Long)
日付2 = Datesirial(Long)

For day = 日付1 To 日付2
Dim R As Long

R = R + 1
Cell(R , "D").Value = day
Next day

End Sub

↑こんな感じでしょうか?
初心者すぎてすいません(汗
2021/04/25(日) 13:12:30.82ID:trooC9Gj0
エナブルイベントの場所が違う
exti subのあとにエナブル入れるべきだし
命令終了後にエナブルイベントをtrueにしないとチェンジイベントが実行されなくなる
dateserialの構文はそもそも(変数年、変数月、変数日)
ロングとかいう変数型をぶちこまれても困っちゃうのでは

いっそダイレクトに日付1=(range("a1"),range("b1"),range("c1"))
とかにしてもいいかもね

とりあえず命令一個一個を自分で調べてから実行しないと身にならないよ
2021/04/25(日) 13:16:06.52ID:trooC9Gj0
間違えた
日付1=dateserial(range("a1"),range("b1"),range("c1"))
そもそもcellはスペルミスだからcellsじゃないと実行されないと思う
Cellsなどの命令は頭文字が大文字、残りは少文字になるはずだから、そうならないならスペルミスを疑ったほうが良い
2021/04/25(日) 13:37:02.20ID:CqRWqB530
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
application.enableevents=false

Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))

For day = 日付1 To 日付2
Dim R As Long

R = R + 1
Cell(R , "D").Value = day
Next day

End Sub

こんな感じでしょうか?
エナブルイベントについてググってみます
2021/04/25(日) 13:39:40.44ID:trooC9Gj0
application.enableevents=trueをさいごにつけてくれ
あとdim r as longの宣言は日付と一緒におこなって
2021/04/25(日) 13:44:43.40ID:CqRWqB530
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
application.enableevents=false

Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))

For day = 日付1 To 日付2
Dim R As Long

R = R + 1
Cell(R , "D").Value = day
Next day

application.enableevents=true
End Sub

>>あとdim r as longの宣言は日付と一緒におこなって
↑まったくわかりません(泣
2021/04/25(日) 14:00:05.29ID:trooC9Gj0
変数宣言の意味がわからないなら
dim系の命令はいっそ全部消しても良いかもね
よくみたら

Dim 日付1 As Long Integer, 日付2 As Integer

ロングインテガーとかいうわけわからん型にしてるし
2021/04/25(日) 14:15:56.57ID:CqRWqB530
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
application.enableevents=false

Worksheets("1").Range("D1")= dateserial(range("a1"),range("b1"),range("c1"))
Worksheets("1").Range("D2") = dateserial(range("a2"),range("b2"),range("c2"))

End Sub

こんな感じでしょうか?
2021/04/25(日) 14:43:47.53ID:trooC9Gj0
なんでループまで消した!
2021/04/25(日) 14:48:07.76ID:CqRWqB530
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
application.enableevents=false

Worksheets("1").Range("D1")= dateserial(range("a1"),range("b1"),range("c1"))
Worksheets("1").Range("D2") = dateserial(range("a2"),range("b2"),range("c2"))

R = R + 1
Cell(R , "D").Value = day
Next day

End Sub

こんな感じでしょうか?
2021/04/25(日) 15:14:07.43ID:c8qfwm7na
どうせカッコが全角とかじゃね
2021/04/25(日) 15:22:01.39ID:trooC9Gj0
あーもう
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
application.enableevents=false


日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))

For 日付 = 日付1 To 日付2

R = R + 1
Cell(R , "D").Value = 日付
Next

application.enableevents=true
End Sub
2021/04/25(日) 15:24:13.50ID:trooC9Gj0
間違えた
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
columns("d").clearcontents
application.enableevents=false


日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))

For 日付 = 日付1 To 日付2

R = R + 1
Cells(R , "D") = 日付
Next

application.enableevents=true
End Sub
2021/04/25(日) 15:32:25.96ID:CqRWqB530
>>436
すごい!!
できました!
コードを見て
私がが2ヶ月かかっても出来ないわけですね
こんなむずかしいことに挑戦していたなんて・・・

これからも勉強していつかは人に教えれるようになりたいです。

感謝!!
2021/04/25(日) 15:36:23.25ID:xxLFjq7K0
いつかじゃなくて今すぐ人に教えられるように理解しろ
2021/04/25(日) 15:37:54.87ID:CqRWqB530
>>438
> いつかじゃなくて今すぐ人に教えられるように理解しろ

↑無理
2021/04/25(日) 17:53:19.26ID:K6WUBqIf0
なんでいつもそんなに上から目線でマウント取ってくるの?
人格破綻者なの??
441デフォルトの名無しさん (ワッチョイ 968e-iMGS)
垢版 |
2021/04/25(日) 18:16:22.33ID:vAt0cvBk0
いつものあいつだろ
2021/04/25(日) 18:20:31.60ID:nATm0Zraa
なになに役人のつくる書類よりはよほどまし
18ページ手前に書き込む内容が
3ページ後にアドレスをみなから手計算しなければならん
おなじページに書けないのか
こんなのが延々 50ページぐらい続く
ひどいスパゲッテイだよ
2021/04/25(日) 18:33:35.35ID:nATm0Zraa
確定申告がこんなひといスパゲッテイだったとは
2021/04/25(日) 18:36:11.53ID:rqvjO/ad0
上から目線でマウントとる人は人格破綻者なのかw
2021/04/25(日) 21:25:32.74ID:n+Zq8N/Kd
>>386
流石に多少やってる奴なら頭に書くのがそれじゃないと知ってる筈だが。
2021/04/25(日) 23:44:44.33ID:B0d72kDU0
>>445
すまない
良く読んだら 
Option Scriptになってるな
Option Explicitの間違いだ
2021/04/26(月) 01:31:30.42ID:0lQeMWYV0
牧野ここにも出没してんか?
暇なのか?あ?
2021/04/26(月) 06:59:23.61ID:lovLRBcK0
だっさw
2021/04/26(月) 16:06:49.39ID:0lQeMWYV0
牧野の人気に嫉妬してるからよ
2021/04/26(月) 16:38:43.84ID:g9sbyhzRa
どなたかGetOpenFilenameでカレントディレクトリが変更されるの何とかできませんか?
構造体はさっぱり分からんのです
2021/04/26(月) 17:20:54.81ID:z51HLtPU0
元のアクティブブックを変数にして
戻せばいいだけだろう
どうせブック複数いじるなら変数のが便利だし
2021/04/26(月) 17:49:31.38ID:g9sbyhzRa
>>450
なら戻しても間に合わんのです
ダイアログの初期フォルダを指定したいのに、なぜかカレントディレクトリが勝手に変更されるみたいなんですね
すみません舌ったらずでした
2021/04/26(月) 17:52:36.88ID:Fs15ZcA/0
これ追加すりゃいいんじゃないの?
ChDir ThisWorkbook.Path

自ブックのパスがいやなら
設定用シートでも作っといて
そこに参照したいパス書いといて
それをChDirに設定しとけば?
2021/04/26(月) 18:05:41.03ID:g9sbyhzRa
いや、それがダメなんですよね
chdirで設定したあとGetOpenFilenameを実行するとカレントディレクトリが変わって、で初期フォルダがあらぬ所に設定される
直前直後でdebug.print curdir入れて確認してるから、間違いなくGetOpenFilenameの段階で変更されてる……と思う?

ユーザーフォーム上に置いて繰り返し実行してるけど、どうやら1回目に開いたダイアログを変更すると、変更先のディレクトリを覚えて、次から勝手にそこに変えてくれているみたい
2021/04/26(月) 18:10:37.42ID:qBKi4u1A0
それネットワークドライブ?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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