!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ
ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ
※前スレ
Excel VBA 質問スレ Part73
https://mevius.5ch.net/test/read.cgi/tech/1631485799/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
Excel VBA 質問スレ Part74
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ d3fd-v8OD)
2021/12/20(月) 01:40:59.22ID:jnlr9GaR0680デフォルトの名無しさん (ワッチョイ 5fda-oAy5)
2022/01/25(火) 22:23:22.62ID:CplOG10X0 Office田中先生、近々ようつべに復帰するみたいですね。
内容は当たり外れあるからアレだけど、あの方の喋りはひょうきんで楽しい。
内容は当たり外れあるからアレだけど、あの方の喋りはひょうきんで楽しい。
681デフォルトの名無しさん (ワッチョイ 5fda-oAy5)
2022/01/25(火) 22:24:31.01ID:CplOG10X0682デフォルトの名無しさん (ドコグロ MM4f-x+w6)
2022/01/25(火) 22:32:38.66ID:T9L9nj8SM >>676 なら
If Not 正当条件1 Then
エラー1
ElseIf Not 正当条件2 Then
エラー2
ElseIf Not 正当条件3 Then
エラー3
ElseIf Not 正当条件4 Then
エラー4
Else
長〜い正当処理1
長〜い正当処理2
長〜い正当処理3
End If
とする、面倒なのは
If 正当条件1 Then
ちょっとした処理1
If 正当条件2 Then
ちょっとした処理2
If 正当条件3 Then
長〜い正当処理1...3
Else
エラー3
Else
エラー2
Else
エラー1
のケースでこの時はルーチン分けるかGotoで途中脱出させると思う
If Not 正当条件1 Then
エラー1
ElseIf Not 正当条件2 Then
エラー2
ElseIf Not 正当条件3 Then
エラー3
ElseIf Not 正当条件4 Then
エラー4
Else
長〜い正当処理1
長〜い正当処理2
長〜い正当処理3
End If
とする、面倒なのは
If 正当条件1 Then
ちょっとした処理1
If 正当条件2 Then
ちょっとした処理2
If 正当条件3 Then
長〜い正当処理1...3
Else
エラー3
Else
エラー2
Else
エラー1
のケースでこの時はルーチン分けるかGotoで途中脱出させると思う
683デフォルトの名無しさん (ワッチョイ 5f7c-4V6Q)
2022/01/25(火) 23:09:39.57ID:ZGZoh/tR0 Select Case 0
Case 正当条件1
エラー1
Case 正当条件2
エラー2
Case 正当条件3
エラー3
Case 正当条件4
エラー4
Case Else
長〜い正当処理1
長〜い正当処理2
長〜い正当処理3
End Select
どやさ
Case 正当条件1
エラー1
Case 正当条件2
エラー2
Case 正当条件3
エラー3
Case 正当条件4
エラー4
Case Else
長〜い正当処理1
長〜い正当処理2
長〜い正当処理3
End Select
どやさ
684デフォルトの名無しさん (ワッチョイ 7fda-4V6Q)
2022/01/25(火) 23:20:00.64ID:Y5KLOHGW0 Call 長い正当処理1to3
685デフォルトの名無しさん (ワッチョイ e7ce-IuBN)
2022/01/25(火) 23:22:36.33ID:DW1OPm0+0 >>676
VBAはショートサーキットしないからIfを何段も並べた方が効率いい場合がある
けど、この場合はエラーも4種類だから判定式を1つにまとめるわけにいかない
この書き方が読みにくいと思うならIfからエラーまでをそれぞれ4つのFunctionに飛ばすかな
VBAはショートサーキットしないからIfを何段も並べた方が効率いい場合がある
けど、この場合はエラーも4種類だから判定式を1つにまとめるわけにいかない
この書き方が読みにくいと思うならIfからエラーまでをそれぞれ4つのFunctionに飛ばすかな
686デフォルトの名無しさん (スフッ Sd7f-N4O5)
2022/01/25(火) 23:29:04.02ID:UWkwB/rRd 頭が悪いからずっとこれだわ
If エラー条件1 Then
エラー処理
Exit Sub
End if
If エラー条件2 Then
エラー処理
Exit Sub
End if
If エラー条件3 Then
エラー処理
Exit Sub
End if
正当処理
If エラー条件1 Then
エラー処理
Exit Sub
End if
If エラー条件2 Then
エラー処理
Exit Sub
End if
If エラー条件3 Then
エラー処理
Exit Sub
End if
正当処理
687デフォルトの名無しさん (ワッチョイ 7f8e-4Ql0)
2022/01/26(水) 01:52:17.01ID:ULWJ4UsX0 >>679
馬鹿が底の浅い知識をひけらかして嘘を書いて、捨てゼリフ吐いて逃げたのにノコノコ戻ってきて再び捨てゼリフと
馬鹿は自分の拙さを知らずに馬鹿な自分が見えるだけの世界が全てだと思っているから馬鹿なんだよ
馬鹿が底の浅い知識をひけらかして嘘を書いて、捨てゼリフ吐いて逃げたのにノコノコ戻ってきて再び捨てゼリフと
馬鹿は自分の拙さを知らずに馬鹿な自分が見えるだけの世界が全てだと思っているから馬鹿なんだよ
688デフォルトの名無しさん (ドコグロ MM4f-x+w6)
2022/01/26(水) 06:27:00.95ID:0epn3Uk/M >>686
サブルーチンに切り出せるならそれが一番見易い
サブルーチンに切り出せるならそれが一番見易い
689デフォルトの名無しさん (ワッチョイ 5fda-oAy5)
2022/01/26(水) 11:26:17.93ID:RGV8ouxS0 パッと思い付いてすぐコードを書ける自体有能だと思いますよ。
みんな凄い。
みんな凄い。
690デフォルトの名無しさん (オッペケ Sr7b-zlty)
2022/01/26(水) 11:54:57.36ID:xGOCvJmUr たしかにVBとか普段書かないからif thenおかendなんて思い出せないよな
691デフォルトの名無しさん (ワッチョイ 275f-8IZx)
2022/01/26(水) 13:10:14.89ID:q0HuFlPw0 ちゃんと単体結合テストやるところの場合だと
処理毎に、Function に分けるのが吉。
処理毎に、Function に分けるのが吉。
692デフォルトの名無しさん (ワントンキン MM3f-iT+O)
2022/01/26(水) 14:42:22.30ID:ip0aOcF2M みんな試行錯誤してきたのがよくわかる
693デフォルトの名無しさん (ワッチョイ 5fda-oAy5)
2022/01/26(水) 16:16:07.18ID:RGV8ouxS0 Excel全般て本当に努力しないと使えないってのはウソじゃないですな
694デフォルトの名無しさん (オッペケ Sr7b-8IZx)
2022/01/26(水) 16:21:39.28ID:ykAsNY55r Excel VBAビギナーの頃
5000万の案件をやり遂げた事あるけど
VBの入り口としては良いよね。
昔はVBAを入り口に、VB6.0 に移行できたから
良かったんだがな。
5000万の案件をやり遂げた事あるけど
VBの入り口としては良いよね。
昔はVBAを入り口に、VB6.0 に移行できたから
良かったんだがな。
695デフォルトの名無しさん (ワッチョイ 5f4f-NNUQ)
2022/01/26(水) 18:39:36.99ID:WAP1y4aa0 >>623
まぁ他言語をやってない奴の意見なんてそんなもんだろな。
VBAで使えるものもあれば使えないものもある。
テンプレートメソッドパターンなんかは使えないけどストラテジーパターンなんかは使える。
そういうの使った際に分岐が減るからUT楽になるかなー、とか、それ使う程の規模かなー、とか
楽な方を選べるってことだよ。
まぁ他言語をやってない奴の意見なんてそんなもんだろな。
VBAで使えるものもあれば使えないものもある。
テンプレートメソッドパターンなんかは使えないけどストラテジーパターンなんかは使える。
そういうの使った際に分岐が減るからUT楽になるかなー、とか、それ使う程の規模かなー、とか
楽な方を選べるってことだよ。
696デフォルトの名無しさん (ドコグロ MM4f-x+w6)
2022/01/26(水) 18:53:39.06ID:YVr9NW6iM697デフォルトの名無しさん (ラクッペペ MM8f-DS0X)
2022/01/26(水) 19:15:39.62ID:xR2ItXtPM グローバルしかない古代BASICに比べれば天国じゃよ
698676 (ワッチョイ 8756-xA1r)
2022/01/26(水) 20:11:08.97ID:+JbM4Kut0 みんなやっぱ困ってるお題なんだなこれ。反応ありがとう。
俺は
Function Func(Args)
Func = TestArguments( Args ) // ←このへんは異論出るかもだけど、内部関数で引数テストはありだと思う。
If Func <> Normal Then
Exit Function
EndIf
Call 長〜い処理1をファンクションにしたもの
Call 長〜い処理2をファンクションにしたもの
Call 長〜い処理3をファンクションにしたもの
End Function
てな感じをイメージしてた。VBAの文法的にはむちゃくちゃかもだけど、最近書いてないのでそこは許してw
C風に
If ( (Func = TestArguments(Args))<>Normal ) Then て書けるのかな。
俺は
Function Func(Args)
Func = TestArguments( Args ) // ←このへんは異論出るかもだけど、内部関数で引数テストはありだと思う。
If Func <> Normal Then
Exit Function
EndIf
Call 長〜い処理1をファンクションにしたもの
Call 長〜い処理2をファンクションにしたもの
Call 長〜い処理3をファンクションにしたもの
End Function
てな感じをイメージしてた。VBAの文法的にはむちゃくちゃかもだけど、最近書いてないのでそこは許してw
C風に
If ( (Func = TestArguments(Args))<>Normal ) Then て書けるのかな。
699デフォルトの名無しさん (ワッチョイ a768-IuBN)
2022/01/26(水) 20:33:27.76ID:Rwt/NS3J0 エラーとしてまとめるってのを昔見たことあるけど、見づらいかなぁ
Sub Func()
On Error GoTo err
flg = True
If flg Then
err.Raise Number:=513, Description:="内容"
End If
' Call 長〜い処理1をファンクションにしたもの
' Call 長〜い処理2をファンクションにしたもの
' Call 長〜い処理3をファンクションにしたもの
Exit Sub
'エラー処理
err:
MsgBox err.Number & vbCrLf & err.Description
End Sub
Sub Func()
On Error GoTo err
flg = True
If flg Then
err.Raise Number:=513, Description:="内容"
End If
' Call 長〜い処理1をファンクションにしたもの
' Call 長〜い処理2をファンクションにしたもの
' Call 長〜い処理3をファンクションにしたもの
Exit Sub
'エラー処理
err:
MsgBox err.Number & vbCrLf & err.Description
End Sub
700デフォルトの名無しさん (ドコグロ MM4f-x+w6)
2022/01/26(水) 20:50:31.29ID:8zLJqphFM >>698
> C風に
> If ( (Func = TestArguments(Args))<>Normal ) Then て書けるのかな。
書けるけど君の思ったようには動かない、例えば
Work = (Func = TestArguments(Args))
は TestArguments() の戻り値が Func と同じなら True、違うなら False が Work に入るから、それと Normal を比較することになる
※ 実際には Func は再帰呼出しとなるが引数が指定されてないのでエラーになる
> C風に
> If ( (Func = TestArguments(Args))<>Normal ) Then て書けるのかな。
書けるけど君の思ったようには動かない、例えば
Work = (Func = TestArguments(Args))
は TestArguments() の戻り値が Func と同じなら True、違うなら False が Work に入るから、それと Normal を比較することになる
※ 実際には Func は再帰呼出しとなるが引数が指定されてないのでエラーになる
701デフォルトの名無しさん (ワッチョイ 8756-xA1r)
2022/01/26(水) 21:48:41.76ID:+JbM4Kut0 >>700
なる。ありがとう。
なる。ありがとう。
702デフォルトの名無しさん (ワッチョイ 47b0-4RXt)
2022/01/27(木) 01:44:43.12ID:f6ffcYr70703デフォルトの名無しさん (ワッチョイ 275f-8IZx)
2022/01/27(木) 02:13:33.38ID:iz7yjT+P0 後藤使うのは素人
704デフォルトの名無しさん (ドコグロ MM4f-x+w6)
2022/01/27(木) 07:25:42.82ID:EosWc+uxM >>702
Raise ならエラー情報(番号とメッセージ)を伝えられると言うメリットがあるな
Raise ならエラー情報(番号とメッセージ)を伝えられると言うメリットがあるな
705デフォルトの名無しさん (ワッチョイ a768-IuBN)
2022/01/27(木) 09:17:43.26ID:ISwrtggt0706デフォルトの名無しさん (ワッチョイ 5f4f-NNUQ)
2022/01/27(木) 09:49:42.96ID:jZ2PQbyQ0 >>696
何故そう思う?
何故そう思う?
707デフォルトの名無しさん (ドコグロ MM4f-x+w6)
2022/01/27(木) 10:10:14.97ID:pNJphUuoM >>706
CallByName() とかを使ってやってやれなくは無いけど無理矢理感あるしな
Strategyパターンはアルゴリズムを記述するサブルーチンへの参照をデータ構造の内部に保持する。
このパターンの実現には、関数ポインタや関数オブジェクト、デリゲートのほか、オーソドックスなオブジェクト指向言語におけるポリモーフィズムと委譲、あるいはリフレクションによる動的ダック・タイピングなどが利用される。
VBAにもまともな関数ポインタがあればね…
CallByName() とかを使ってやってやれなくは無いけど無理矢理感あるしな
Strategyパターンはアルゴリズムを記述するサブルーチンへの参照をデータ構造の内部に保持する。
このパターンの実現には、関数ポインタや関数オブジェクト、デリゲートのほか、オーソドックスなオブジェクト指向言語におけるポリモーフィズムと委譲、あるいはリフレクションによる動的ダック・タイピングなどが利用される。
VBAにもまともな関数ポインタがあればね…
708デフォルトの名無しさん (ワッチョイ 5f4f-NNUQ)
2022/01/27(木) 10:41:53.58ID:jZ2PQbyQ0709デフォルトの名無しさん (ドコグロ MM4f-x+w6)
2022/01/27(木) 11:20:16.68ID:NmFY0FMsM >>708
ああ、インターフェースはあるから移譲はできるか
ああ、インターフェースはあるから移譲はできるか
710デフォルトの名無しさん (ワッチョイ 275f-8IZx)
2022/01/27(木) 12:29:10.84ID:iz7yjT+P0 シンプル・イズ・ベスト。
スティーブ・ジョブズの信条でもあった。
凡才は複雑を好み、天才はシンプルを好む。
スティーブ・ジョブズの信条でもあった。
凡才は複雑を好み、天才はシンプルを好む。
711デフォルトの名無しさん (ワッチョイ e7da-lWUc)
2022/01/28(金) 00:04:37.97ID:sv+QVprG0 WorkSheetのEventで、
テーブルのフィルタソート機能(昇順or降順)をユーザが使ったときのEvent
ってできるんでしょうか?
最悪、"フィルタ機能を使った"時点でも取得できれば。。。
テーブルのフィルタソート機能(昇順or降順)をユーザが使ったときのEvent
ってできるんでしょうか?
最悪、"フィルタ機能を使った"時点でも取得できれば。。。
712デフォルトの名無しさん (ワッチョイ e7ce-IuBN)
2022/01/28(金) 00:19:09.31ID:6Z68BDtw0 >>711
ない
ない
713デフォルトの名無しさん (ワッチョイ e7da-Yr+x)
2022/01/28(金) 03:12:47.26ID:sv+QVprG0 >>712
まじですか、、、ありがとうございました。
まじですか、、、ありがとうございました。
714デフォルトの名無しさん (ワッチョイ 7d01-+o4x)
2022/01/28(金) 12:32:58.97ID:EweXC9jR0 すんません、膨大なデータ量の集計を任されて困ってます。
例えばA1セルに
「1.5G」とあるものは
Gを取った上で1024を3乗し、B1に表示
「256M」とあるものは
Mを取った上で1024を2乗し、B1に表示
「504K」とあるものは
Kを取った上で1024を掛け、B1に表示
みたいな便利なことができる関数があれば教えて頂きたく。
SUBSTITUTEで文字を取ったりVALUEで数字だけ抜き出したりしてみても、そこに条件判定を組み込むことが出来なくて…。
例えばA1セルに
「1.5G」とあるものは
Gを取った上で1024を3乗し、B1に表示
「256M」とあるものは
Mを取った上で1024を2乗し、B1に表示
「504K」とあるものは
Kを取った上で1024を掛け、B1に表示
みたいな便利なことができる関数があれば教えて頂きたく。
SUBSTITUTEで文字を取ったりVALUEで数字だけ抜き出したりしてみても、そこに条件判定を組み込むことが出来なくて…。
715デフォルトの名無しさん (ワッチョイ f1ce-Xc5L)
2022/01/28(金) 13:00:06.93ID:6Z68BDtw0 >>714
Excelのバージョン書いて
Excelのバージョン書いて
716デフォルトの名無しさん (ブーイモ MM81-Xc5L)
2022/01/28(金) 13:09:05.83ID:tnq08GUKM >>714
あんまりスッキリした方法じゃないけど、単位ごとに処理を分けて並べるぐらいしかないのでは
式はもうちょっと整理できると思うけど、とりあえず動くやつ
=IF(RIGHT(A1,1)="G",LEFT(A1,LEN(A1)-1)*1024^3,IF(RIGHT(A1,1)="M",LEFT(A1,LEN(A1)-1)*1024^2,IF(RIGHT(A1,1)="K",LEFT(A1,LEN(A1)-1)*1024,A1)))
あんまりスッキリした方法じゃないけど、単位ごとに処理を分けて並べるぐらいしかないのでは
式はもうちょっと整理できると思うけど、とりあえず動くやつ
=IF(RIGHT(A1,1)="G",LEFT(A1,LEN(A1)-1)*1024^3,IF(RIGHT(A1,1)="M",LEFT(A1,LEN(A1)-1)*1024^2,IF(RIGHT(A1,1)="K",LEFT(A1,LEN(A1)-1)*1024,A1)))
717デフォルトの名無しさん (ワッチョイ 7d01-+o4x)
2022/01/28(金) 13:43:11.42ID:EweXC9jR0718デフォルトの名無しさん (ワッチョイ ad68-Xc5L)
2022/01/28(金) 13:54:48.79ID:SUVzbVrJ0 powerとfindで考えてたけど、あんまり変わらんかった
719デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 14:06:54.61ID:54qKpcGwM >>717
365 なら
=SWITCH(RIGHT(A1, 1), "G", 1024^3, "M", 1024^2, "K", 1024) * LEFT(A1, LEN(A1) - 1)
ただし、最後が GMK でなかった時はエラーになるのでその場合はIFERROR()で回避かな
365 なら
=SWITCH(RIGHT(A1, 1), "G", 1024^3, "M", 1024^2, "K", 1024) * LEFT(A1, LEN(A1) - 1)
ただし、最後が GMK でなかった時はエラーになるのでその場合はIFERROR()で回避かな
720デフォルトの名無しさん (ワッチョイ a563-ntHq)
2022/01/28(金) 14:10:37.46ID:pNi2eyZM0 集計なら式使わずに素直にVBAで処理すれば?
721デフォルトの名無しさん (ワッチョイ 7d01-+o4x)
2022/01/28(金) 15:01:21.24ID:EweXC9jR0 >>719
ありがとう、それも問題なくいけました。
ありがとう、それも問題なくいけました。
722デフォルトの名無しさん (ワッチョイ f1ce-Xc5L)
2022/01/28(金) 15:16:30.86ID:6Z68BDtw0 >>721
1K未満の単位の付かない数値に対応したやつ
=LET(u,RIGHT(A1,1),p,SEARCH(u,"kmg"),IFERROR(LEFT(A1,LEN(A1)-1)*1024^p,A1))
1K未満の単位の付かない数値に対応したやつ
=LET(u,RIGHT(A1,1),p,SEARCH(u,"kmg"),IFERROR(LEFT(A1,LEN(A1)-1)*1024^p,A1))
723デフォルトの名無しさん (ワッチョイ 7d01-+o4x)
2022/01/28(金) 15:34:49.10ID:EweXC9jR0 色々ありがとう。使わせていただきます。
724デフォルトの名無しさん (ワッチョイ ea4f-stl2)
2022/01/28(金) 16:00:55.15ID:Pw9WEPs80 >>723
スピードを求めるならVBAでやった方がいい。
基本、VBAよりCELLに入れた数式の方が計算早いけど、
値を設定するたび再計算が走るのでは当然遅くなる。
単位をRightの1文字切り取って使うかInStrRevで1文字切り取って使うかは自由だし、
数値部分も最後のひと文字を抜いて数値変換する方法はどうにでもなるはずだから、
後は切り取った単位で冪乗計算の乗数を変えてあげれば簡単に行けるはず。
スピードを求めるならVBAでやった方がいい。
基本、VBAよりCELLに入れた数式の方が計算早いけど、
値を設定するたび再計算が走るのでは当然遅くなる。
単位をRightの1文字切り取って使うかInStrRevで1文字切り取って使うかは自由だし、
数値部分も最後のひと文字を抜いて数値変換する方法はどうにでもなるはずだから、
後は切り取った単位で冪乗計算の乗数を変えてあげれば簡単に行けるはず。
725デフォルトの名無しさん (ワッチョイ a95f-4IfY)
2022/01/28(金) 16:07:42.05ID:eEIZm5jJ0 膨大な行数になるようなら
関数よりマクロの方が断然軽い。
マクロの記録で瞬間でできるし。
関数よりマクロの方が断然軽い。
マクロの記録で瞬間でできるし。
726デフォルトの名無しさん (ワッチョイ a95f-4IfY)
2022/01/28(金) 16:08:26.59ID:eEIZm5jJ0 記述すら必要なし。
727デフォルトの名無しさん (スプッッ Sd12-Xc5L)
2022/01/28(金) 17:30:28.61ID:vX0FG/YWd マクロの記録で瞬間て、どうやるの?
728デフォルトの名無しさん (ワッチョイ f1a6-bU36)
2022/01/28(金) 17:31:33.84ID:MK2zcruJ0 一瞬で
729デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 17:35:47.36ID:sJpZ8snBM この程度なら関数の方が速いと思うぞ
マルチスレッドで動くし
再計算も変化したセルに関連するところしかやらないから問題にはならないと思う
マルチスレッドで動くし
再計算も変化したセルに関連するところしかやらないから問題にはならないと思う
730デフォルトの名無しさん (スップ Sdea-dw97)
2022/01/28(金) 17:36:25.47ID:u6dzd5iJd ここはVBAスレだから質問はスレチだけどみんな優しいね
731デフォルトの名無しさん (ワッチョイ 66da-Xc5L)
2022/01/28(金) 17:49:38.97ID:qJef3P+M0732デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 17:57:01.02ID:sJpZ8snBM > ここはVBAスレだから(計算式の)質問はスレチだけどみんな優しいね
733デフォルトの名無しさん (ワッチョイ 668e-ltXr)
2022/01/28(金) 18:14:34.37ID:ZcQb+fCA0 >>714
こんな奴に作業を任せるとかそもそも間違えている
こんな奴に作業を任せるとかそもそも間違えている
734デフォルトの名無しさん (ワッチョイ 792f-Cnlt)
2022/01/28(金) 18:21:53.88ID:np+yf06a0 今のエクセルの計算式は基本マルチスレッドでやるから、VBAでちまちまやるよりは早いだろうけど
このスレ的にはVBAで関数作るんが正解じゃないかと思った
で、ふと思ったが、VBAの関数をワークシートの計算式で使ったら、シングルスレッドで処理されるのかな
このスレ的にはVBAで関数作るんが正解じゃないかと思った
で、ふと思ったが、VBAの関数をワークシートの計算式で使ったら、シングルスレッドで処理されるのかな
735デフォルトの名無しさん (ワッチョイ a5d0-26/q)
2022/01/28(金) 18:58:00.84ID:Qmj8/oz70 >>711
どうしても「そのテーブルのフィルタソート機能を使用した」時点を起点に処理を始めなければならないとすれば、
Worksheet_SelectionChangeで、その特定のテーブルの特定の列を走査して昇順または降順にデータが並んでいれば「フィルタソート機能を使った」と判定する、ぐらいしか思いつかない
たまたまソートする前にデータが整列してしまっていた場合や処理が完了した後に再度処理が走ってしまうので、どこかにフラグを作って管理する必要もあると思うけど
あと、ソートする列に数値と文字列やブール値などが混在している場合も判定に注意が必要かと思う
どうしても「そのテーブルのフィルタソート機能を使用した」時点を起点に処理を始めなければならないとすれば、
Worksheet_SelectionChangeで、その特定のテーブルの特定の列を走査して昇順または降順にデータが並んでいれば「フィルタソート機能を使った」と判定する、ぐらいしか思いつかない
たまたまソートする前にデータが整列してしまっていた場合や処理が完了した後に再度処理が走ってしまうので、どこかにフラグを作って管理する必要もあると思うけど
あと、ソートする列に数値と文字列やブール値などが混在している場合も判定に注意が必要かと思う
736デフォルトの名無しさん (ワッチョイ ad68-Xc5L)
2022/01/28(金) 19:12:04.41ID:SUVzbVrJ0737デフォルトの名無しさん (ワッチョイ 11cc-21ac)
2022/01/28(金) 19:24:01.89ID:qlKzmgV90 7時30分から30分ずつ加算した時刻をコンボボックスに入れるやり方をおしえてください
For i = 1 To 19
UserForm1.ComboBox5.AddItem Format(DateAdd("n", 30, "7:30"), "h:mm")
Next i
For i = 1 To 19
UserForm1.ComboBox5.AddItem Format(DateAdd("n", 30, "7:30"), "h:mm")
Next i
738デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 19:35:31.95ID:sJpZ8snBM >>734
> で、ふと思ったが、VBAの関数をワークシートの計算式で使ったら、シングルスレッドで処理されるのかな
ドキュメントは見たことないけどVBA部分はシングルだろうと思う
マルチで走るとグローバル変数で競合したとき困るし
> で、ふと思ったが、VBAの関数をワークシートの計算式で使ったら、シングルスレッドで処理されるのかな
ドキュメントは見たことないけどVBA部分はシングルだろうと思う
マルチで走るとグローバル変数で競合したとき困るし
739デフォルトの名無しさん (ワッチョイ 6ada-b3Fm)
2022/01/28(金) 19:40:10.55ID:GYI6WCqI0 VBA専用だけどExcel全般もOK
Excel板と仲悪い理由だけは分かった。
Excel板と仲悪い理由だけは分かった。
740デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 19:41:52.43ID:sJpZ8snBM >>737
Dim T As Date
T = TimeSerial(7, 30, 0)
For i = 1 To 19
UserForm1.ComboBox5.AddItem Format(T, "h:mm")
T = DateAdd("n", 30, T)
Next i
Dim T As Date
T = TimeSerial(7, 30, 0)
For i = 1 To 19
UserForm1.ComboBox5.AddItem Format(T, "h:mm")
T = DateAdd("n", 30, T)
Next i
741デフォルトの名無しさん (スフッ Sd0a-bU36)
2022/01/28(金) 19:55:14.07ID:PEhFKy76d power queryと変数定義関数で、VBA使わずともかなりのことができるようになったよね
ローコードツールみたいだなと思う
ローコードツールみたいだなと思う
742デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 20:01:26.98ID:XaG/+jlyM >>735
> Worksheet_SelectionChangeで、その特定のテーブルの特定の列を走査して昇順または降順にデータが並んでいれば「フィルタソート機能を使った」と判定する、ぐらいしか思いつかない
そんなことしなくてもWorkSheet.AutoFilterMode見て、WorkSheet.AutoFilter見たらいいだけ
> Worksheet_SelectionChangeで、その特定のテーブルの特定の列を走査して昇順または降順にデータが並んでいれば「フィルタソート機能を使った」と判定する、ぐらいしか思いつかない
そんなことしなくてもWorkSheet.AutoFilterMode見て、WorkSheet.AutoFilter見たらいいだけ
744デフォルトの名無しさん (ワッチョイ a5d0-26/q)
2022/01/28(金) 21:49:05.63ID:Qmj8/oz70 >>742
テーブルらしいので、WorksheetじゃなくてListObjectを見ないと判別できない
あと少なくとも自分には、AutoFilterにはフィルタソートをかけたかどうかを判別できるものが見つけられなかった
(フィルタソートしてもAutoFilter.FilterModeはFalse)
もし環境で動作が異なるのならごめんなさい
テーブルらしいので、WorksheetじゃなくてListObjectを見ないと判別できない
あと少なくとも自分には、AutoFilterにはフィルタソートをかけたかどうかを判別できるものが見つけられなかった
(フィルタソートしてもAutoFilter.FilterModeはFalse)
もし環境で動作が異なるのならごめんなさい
745デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 22:21:03.74ID:0dNIFpO5M >>744
> テーブルらしいので、WorksheetじゃなくてListObjectを見ないと判別できない
ああ、そりゃすまん
> あと少なくとも自分には、AutoFilterにはフィルタソートをかけたかどうかを判別できるものが見つけられなかった
手元に環境ないから試せないけど
ListObjects(...).AutoFilter.Filters(...).On
じゃねーの?
> テーブルらしいので、WorksheetじゃなくてListObjectを見ないと判別できない
ああ、そりゃすまん
> あと少なくとも自分には、AutoFilterにはフィルタソートをかけたかどうかを判別できるものが見つけられなかった
手元に環境ないから試せないけど
ListObjects(...).AutoFilter.Filters(...).On
じゃねーの?
746デフォルトの名無しさん (ワッチョイ 3a3d-viSv)
2022/01/29(土) 00:40:00.86ID:d67hOlZf0 図書館に「はじめてのPower Automate Desktop」ていう本があったので借りてみたんだけどよ。
VBAでは10-20行ぐらいのエクセルの処理を、40ページぐらいかけて説明してたわ。
やってることは、VBAでやるコマンドをGUI操作でやってるような感じ。
どう考えても、VBAより簡単とは思えんしむしろVBAのほうが簡単じゃねーの?
VBAでは10-20行ぐらいのエクセルの処理を、40ページぐらいかけて説明してたわ。
やってることは、VBAでやるコマンドをGUI操作でやってるような感じ。
どう考えても、VBAより簡単とは思えんしむしろVBAのほうが簡単じゃねーの?
747デフォルトの名無しさん (スッップ Sd0a-7m15)
2022/01/29(土) 02:38:30.78ID:wvbeuCX/d >>746
馬鹿には違いがわからんだけだろ
馬鹿には違いがわからんだけだろ
748デフォルトの名無しさん (ワッチョイ 662c-Bf/t)
2022/01/29(土) 06:07:15.34ID:S/AYuT160 AWS など、Linux は逆。
GUIを排除して、コード化する。IaC(Infrastructure as Code)
AWSのGUIで設定したら、人によって間違うから、
どのボタンを押すなど、ソースコードで書いて、Terraform で実行する
これなら、Terraformのコードをサーバーへ転送して、実行するだけで環境構築できる
GUIを排除して、コード化する。IaC(Infrastructure as Code)
AWSのGUIで設定したら、人によって間違うから、
どのボタンを押すなど、ソースコードで書いて、Terraform で実行する
これなら、Terraformのコードをサーバーへ転送して、実行するだけで環境構築できる
749デフォルトの名無しさん (ワッチョイ a95f-4IfY)
2022/01/29(土) 06:12:15.60ID:nI5CwbIZ0 いや…VBA (VB6)を作った人は、相当優秀やな
昔、VB6 でフリーウェア作ったり、楽しかったわ…
昔、VB6 でフリーウェア作ったり、楽しかったわ…
750デフォルトの名無しさん (ワッチョイ 0a2e-LlB6)
2022/01/29(土) 07:43:57.70ID:p3H2eYK50 >>746
まあ、コードがわからん人(わからん人が使えるとは言ってない)向けだからな。
会社で色々ガチガチに制限されてるけど、そこだけはオッケーとかだったら使うしかないじゃない?そういう人向けだと思うよ。
Power Automateはまだサーバーが勝手に動いてくれるからマシだけど、Desktopはホント用途がわからん。
まあ、コードがわからん人(わからん人が使えるとは言ってない)向けだからな。
会社で色々ガチガチに制限されてるけど、そこだけはオッケーとかだったら使うしかないじゃない?そういう人向けだと思うよ。
Power Automateはまだサーバーが勝手に動いてくれるからマシだけど、Desktopはホント用途がわからん。
751デフォルトの名無しさん (ワッチョイ 6ada-b3Fm)
2022/01/29(土) 07:56:58.17ID:u7cBLx/b0 他言語のプログラマーからは下に見られるVBA
なぜ差別される?
なぜ差別される?
752デフォルトの名無しさん (ラクッペペ MM3e-KkJC)
2022/01/29(土) 08:31:49.58ID:vQXkhP0VM 中途半端に自分の知識を誇示して周囲を見下すやつが多いから
職場や上司を叩いて自己満足に浸るレスがこのスレでも目立つ
職場や上司を叩いて自己満足に浸るレスがこのスレでも目立つ
753デフォルトの名無しさん (ワッチョイ ea3e-81nj)
2022/01/29(土) 08:56:48.05ID:mMYfjebB0 起動しているedgeやIEで開いているページから文字を取り出したいのですがどうしたらいいでしょうか?
もしくは起動しているページからワンクリックで文字を取り出しExcelに貼り付ける様な方法はありますか?
もしくは起動しているページからワンクリックで文字を取り出しExcelに貼り付ける様な方法はありますか?
754デフォルトの名無しさん (ワッチョイ 0a2e-LlB6)
2022/01/29(土) 09:01:58.47ID:p3H2eYK50 RPAみたいに世間の認知も高いわけじゃない、
プログラムほど難しいことやってるように見えない、
そのくせ仕事は手抜きしてるように見える、
聞いてもよく分からないことしか言わない、
知らない人からみたらこんな感じだからじゃない?
プログラムほど難しいことやってるように見えない、
そのくせ仕事は手抜きしてるように見える、
聞いてもよく分からないことしか言わない、
知らない人からみたらこんな感じだからじゃない?
755デフォルトの名無しさん (ワッチョイ ea4f-stl2)
2022/01/29(土) 09:41:15.24ID:D0pOsND50 >>751
理由は色々あると思う。
名前がVisual Basic for Applications というくらいEXCELとかACCESSとかのMicrosoft Officeに特化していて
実際のシステムを構築するのには不向きであること。
間口が広いので初心者向きでもあり、それが逆にどんな人でもちょっと勉強すれば組めてしまうイメージがあること。
フレームワークの知識が皆無でも普通に組めてしまうこと。
VB.Netですら消えかかってるこの時代にあまりに旧態依然とした言語であること。
ちょろっと何かを組むには非常に良い言語なんだけどね。俺もVBAでシステム組めって言われたら「え・・・」ってなると思う。
理由は色々あると思う。
名前がVisual Basic for Applications というくらいEXCELとかACCESSとかのMicrosoft Officeに特化していて
実際のシステムを構築するのには不向きであること。
間口が広いので初心者向きでもあり、それが逆にどんな人でもちょっと勉強すれば組めてしまうイメージがあること。
フレームワークの知識が皆無でも普通に組めてしまうこと。
VB.Netですら消えかかってるこの時代にあまりに旧態依然とした言語であること。
ちょろっと何かを組むには非常に良い言語なんだけどね。俺もVBAでシステム組めって言われたら「え・・・」ってなると思う。
756デフォルトの名無しさん (ワッチョイ 6a42-6J+F)
2022/01/29(土) 09:47:43.70ID:UwALgNeL0 そもそもVB自体が下に見られているからじゃないかな
知らんけど
知らんけど
757デフォルトの名無しさん (ワッチョイ ad68-Xc5L)
2022/01/29(土) 09:54:07.85ID:OyQV2dPc0 >751
覚える事が信じられないぐらい少なく、誰でも使えるから
変数とif、for辺り知ってればほとんどの場合に対応できる
若干とっつきにくいのがset程度
更に相当テキトーに書いても他へ影響し辛い
どれも実務上は長所だけど、
他の言語を知ってると「なにこれ?」ってなるのはわかる。なんというかおもちゃっぽい
覚える事が信じられないぐらい少なく、誰でも使えるから
変数とif、for辺り知ってればほとんどの場合に対応できる
若干とっつきにくいのがset程度
更に相当テキトーに書いても他へ影響し辛い
どれも実務上は長所だけど、
他の言語を知ってると「なにこれ?」ってなるのはわかる。なんというかおもちゃっぽい
758デフォルトの名無しさん (ワッチョイ a5d0-26/q)
2022/01/29(土) 10:17:37.26ID:M8ea68f50 >>745
自分の環境だと、普通のフィルタをかけた状態ならそれで拾えるけど、フィルタのソートを行った状態は拾えないので、やりたくないけどどうしてもやるなら列のデータをなめるしかないのかなと
>>751
元々、Visual Basic自体がBASICという、学校でプログラミングの導入として教えるような簡易なプログラミング言語から派生したものだから、他の言語より低く見られていた
更にそこから派生したVBA(マクロ)やVBS(スクリプト)なんかはより低く見られている
まぁ実際に、図体の重たいプログラムでは手が届きにくい部分を補完する孫の手的な使い方をするのが主流なので、穴埋めや間に合わせ的な位置付けに見られているからだと思う
自分の環境だと、普通のフィルタをかけた状態ならそれで拾えるけど、フィルタのソートを行った状態は拾えないので、やりたくないけどどうしてもやるなら列のデータをなめるしかないのかなと
>>751
元々、Visual Basic自体がBASICという、学校でプログラミングの導入として教えるような簡易なプログラミング言語から派生したものだから、他の言語より低く見られていた
更にそこから派生したVBA(マクロ)やVBS(スクリプト)なんかはより低く見られている
まぁ実際に、図体の重たいプログラムでは手が届きにくい部分を補完する孫の手的な使い方をするのが主流なので、穴埋めや間に合わせ的な位置付けに見られているからだと思う
759デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/29(土) 11:04:25.26ID:1pI7yMTXM760デフォルトの名無しさん (ワッチョイ a6da-dw97)
2022/01/29(土) 11:05:21.11ID:bDLL2+/00761デフォルトの名無しさん (ワッチョイ 3d56-6WVI)
2022/01/29(土) 11:13:37.04ID:M50L9SrL0 >>757
> 他の言語を知ってると「なにこれ?」ってなるのはわかる。なんというかおもちゃっぽい
なんとなく納得できる表現だな。
C・C++・C#・JAVA・Rustとかの、かちっとしたのが当然だと思ってると面食らう。
特に Variant。まあ、最近はコンパイラ系に逆輸入されてるけど。
> 他の言語を知ってると「なにこれ?」ってなるのはわかる。なんというかおもちゃっぽい
なんとなく納得できる表現だな。
C・C++・C#・JAVA・Rustとかの、かちっとしたのが当然だと思ってると面食らう。
特に Variant。まあ、最近はコンパイラ系に逆輸入されてるけど。
762デフォルトの名無しさん (ワッチョイ 3d56-6WVI)
2022/01/29(土) 11:15:31.30ID:M50L9SrL0 あ。馬鹿にしてるわけではないよ。便利だと思う。
ただ、コンストラクタ引数と継承は入れてほしかった。
ただ、コンストラクタ引数と継承は入れてほしかった。
763デフォルトの名無しさん (オッペケ Srbd-T/LI)
2022/01/29(土) 11:28:56.70ID:tQGwfe1Lr VBAが言語として下に見られてるのかは知らんが書いてるやつの水準は他言語より圧倒的に下だよ
変数の型指定しない、withつかわない、まとめられる処理をまとめずにコピペし大量のモジュールを作る、配列とか使わないでセルを一回一回読み書き
こんなコードが会社のエクセルにはたくさんある
そしてそれが神マクロと崇め奉られてるのホントゴミ
変数の型指定しない、withつかわない、まとめられる処理をまとめずにコピペし大量のモジュールを作る、配列とか使わないでセルを一回一回読み書き
こんなコードが会社のエクセルにはたくさんある
そしてそれが神マクロと崇め奉られてるのホントゴミ
764デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/29(土) 11:44:30.01ID:PUyOyrFtM765デフォルトの名無しさん (ワッチョイ f1ce-Xc5L)
2022/01/29(土) 12:02:30.08ID:ZRWUeJUN0 結果がすべて
仕事を終わらせたやつが評価されるんであって、どんな方法を使ったか、きれいに書いたかどうかなんて普通は問われない
仕事を終わらせたやつが評価されるんであって、どんな方法を使ったか、きれいに書いたかどうかなんて普通は問われない
766デフォルトの名無しさん (ワッチョイ 6a7c-lJmG)
2022/01/29(土) 12:10:51.21ID:L/C5gyxS0767デフォルトの名無しさん (ワッチョイ a95f-4IfY)
2022/01/29(土) 12:12:26.42ID:nI5CwbIZ0 何かを見下したい、マウントを取りたいのは、
愚か者の本能であって、理由は後付け。
VBA がハイコストパフォーマンスで
ある程度のシステムを構築できてしまう
便利なツールであることには変わりない。
頭の悪い人間ほど、意味のない格付けをしたがる。
愚か者の本能であって、理由は後付け。
VBA がハイコストパフォーマンスで
ある程度のシステムを構築できてしまう
便利なツールであることには変わりない。
頭の悪い人間ほど、意味のない格付けをしたがる。
768デフォルトの名無しさん (ワッチョイ a95f-4IfY)
2022/01/29(土) 12:22:38.03ID:nI5CwbIZ0 Windows環境で、
なんらかの要件を実現する方法の選定として
導入コストを考えたら、DOSバッチでも
PowerShellでも、JavaScriptでも、WSHでも
既存のリソースのみで実現できる方が良いに決まってる。
特に日本人の思考は、合理性を軽視して、見てくれや
くだらない感情で判断することが多いので、
開発のプロジェクトでも時間とカネのコスト管理ができてない
愚かな企業が多い。
なんらかの要件を実現する方法の選定として
導入コストを考えたら、DOSバッチでも
PowerShellでも、JavaScriptでも、WSHでも
既存のリソースのみで実現できる方が良いに決まってる。
特に日本人の思考は、合理性を軽視して、見てくれや
くだらない感情で判断することが多いので、
開発のプロジェクトでも時間とカネのコスト管理ができてない
愚かな企業が多い。
769デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/29(土) 12:23:55.26ID:hiZAoffAM >>765
そういう書き捨ての仕事もあるし、連綿と続く仕事もある
そういう書き捨ての仕事もあるし、連綿と続く仕事もある
770デフォルトの名無しさん (ワッチョイ a95f-4IfY)
2022/01/29(土) 12:27:08.84ID:nI5CwbIZ0 結果として、他国からバカにされてる
日本の生産性の低さに繋がっている
あらゆる分野で、開発スピードは、
圧倒的に米欧・中華が優っている
日本の生産性の低さに繋がっている
あらゆる分野で、開発スピードは、
圧倒的に米欧・中華が優っている
771デフォルトの名無しさん (ワッチョイ 668e-ltXr)
2022/01/29(土) 12:29:20.03ID:iTemfgLK0 >>768
例の馬鹿か
例の馬鹿か
772デフォルトの名無しさん (オッペケ Srbd-T/LI)
2022/01/29(土) 12:34:16.18ID:Q0NPbY74r773デフォルトの名無しさん (オッペケ Srbd-4IfY)
2022/01/29(土) 12:43:35.90ID:28WRDRfRr まあ正直、要件定義〜設計までの上流工程の人間からすると
言語は何でも良いんだけどね。
こだわるのはコーディングフェーズ以下の下流エンジニアであって。
言語は何でも良いんだけどね。
こだわるのはコーディングフェーズ以下の下流エンジニアであって。
774デフォルトの名無しさん (ワッチョイ 6ada-b3Fm)
2022/01/29(土) 14:49:20.34ID:u7cBLx/b0 関数が得意な人はなんでも関数で片付ける、マクロが得意な人はなんでもマクロでやろうとする傾向があると田中氏が言っていたな講演会で。
バランス良く使える人こそ真のエキスパートだとも。
バランス良く使える人こそ真のエキスパートだとも。
775デフォルトの名無しさん (ブーイモ MMc9-lJmG)
2022/01/29(土) 15:14:16.94ID:YNpwCmNLM776デフォルトの名無しさん (ワッチョイ 11cc-21ac)
2022/01/29(土) 15:41:11.14ID:D/yb4xS+0 指定した範囲にそれぞれ外枠線を引きたいのですが、量が多くなると時間がかかるのでUnionを使いたいのですが、
Dim rng As Range, i As Long
Set rng = Range("B2:B3")
Set rng = Union(rng, Range("C2:C3"))
For i = 4 To 50 Step 2
Set rng = Union(rng, Range("B" & i & ":B" & i + 1))
Set rng = Union(rng, Range("C" & i & ":C" & i + 1))
Next i
rng.BorderAround Weight:=xlThin
だと、Range("B2:C51").BorderAround Weight:=xlThin と同じになってしまいます。
短い時間で、それぞれの範囲に外枠線を引く方法を教えてください
Dim rng As Range, i As Long
Set rng = Range("B2:B3")
Set rng = Union(rng, Range("C2:C3"))
For i = 4 To 50 Step 2
Set rng = Union(rng, Range("B" & i & ":B" & i + 1))
Set rng = Union(rng, Range("C" & i & ":C" & i + 1))
Next i
rng.BorderAround Weight:=xlThin
だと、Range("B2:C51").BorderAround Weight:=xlThin と同じになってしまいます。
短い時間で、それぞれの範囲に外枠線を引く方法を教えてください
777デフォルトの名無しさん (ワッチョイ a563-Bf/t)
2022/01/29(土) 15:45:53.96ID:W/oxWoyf0778デフォルトの名無しさん (ワッチョイ a5b0-QLU7)
2022/01/29(土) 15:52:44.84ID:MAc7BERw0 >>761
JavaでもObjectになんでも突っ込めるじゃん
JavaでもObjectになんでも突っ込めるじゃん
779デフォルトの名無しさん (ワッチョイ 6ada-b3Fm)
2022/01/29(土) 16:14:17.19ID:u7cBLx/b0 マクロ書くより手作業でやった方が早いのにわざわざマクロでやる人ばかりとも言っていたな。
なるほどなと納得する講演会だったね。
なるほどなと納得する講演会だったね。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★3 [蚤の市★]
- JAが"政府の備蓄米買い上げ"見越して価格下げず!?「古いコメは食用向きでないなどと理由をつけ...」専門家解説 [煮卵★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【結婚の壁】結婚どころか今まで恋愛経験は一切ない人も…「年収500万の壁」を突破できない中間層の苦しい現実 [ぐれ★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【高市悲報】維新奥下「企業から陳情のためにキャバクラに呼ばれたんや😤いい迷惑やったが断り辛かった」 [359965264]
- 日本、愚民化教育大成功!国際競争力は落ち国民は飢え中国との戦争を求める国民だらけになる [819729701]
- 【高市悲報】レーダー照射で日本が喧嘩売ってる中、アメリカ軍「我々はパールハーバーを忘れない」と日本に向けてポストへ [709039863]
- 高市首相「自らの命は自らが守るという原則で、行動とっていただきたい」 [256556981]
- 本当の問題は高市がバカなことじゃなくて高市みたいなバカを支持するバカが大量にいることだよな [314039747]
- 【悲報】おこめ券効果アンケート、全年代で「効果なし」と回答されてしまう [733893279]
