X



Excel VBA 質問スレ Part73

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 4668-xJJl)
垢版 |
2021/09/13(月) 07:29:59.47ID:GNx0xRRz0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part70
https://mevius.5ch.net/test/read.cgi/tech/1616072923/
Excel VBA 質問スレ Part71
https://mevius.5ch.net/test/read.cgi/tech/1621914481/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/09/29(水) 08:41:09.05ID:+gGxbszWd
>>202
元データの上位2バイトが00で埋まってた場合、論理シフトで符号が変わる場合があるでしょ
VBAには論理シフトがないから、何か別の方法で再現する必要があると思うんだけど
具体的に、動くコード書いてみて
2021/09/29(水) 09:29:57.66ID:ilMiUA0BM
Byte型からLSetが単純で一番速いと思う

定義(追加部分のみ)

Type tyByte
  Byte0 As Byte
  Byte1 As Byte
  Byte2 As Byte
  Byte3 As Byte
End Type

代入処理はこんな感じ
データの格納順序は知らんから適当

myByte.Byte0 = long0 And &HFF&
myByte.Byte1 = (long0 And &HFF00&) \ &H100&
myByte.Byte2 = long1 And &HFF&
myByte.Byte3 = (long1 And &HFF00&) \ &H100&
LSet mySingle = myByte
2021/09/29(水) 09:40:16.79ID:f5tfMzLod
>>204
それなら最初にLongをByteにLsetすれば、マスクやシフトしなくても途中のバイトがそのまま取り出せる
コードの行数は増えるけど演算量はもっと減らせる
2021/09/29(水) 12:56:20.18ID:slA14A+y0
>>203
ちょっと何を言ってるか分かりませんね。
まずシフトの話はどこから出てきたの?
Long型ならマイナスであれば常にトップビットは
立っているよね?
だからプラスに変換するってことだけど?
トップビットが立っていなければプラスなんで変換する必要はない。
もちろん、最初の設定値のLong型の下位2バイトでマイナスを表現するならそれぞれ*-1してやらなきゃいけないけど>>191を見た限りではそのような扱いでもないしね。

途中でマイナスをもつような型の変数に入れるなら
その後始末をしないといけないというだけ。
そもそもトップビットがなぜ符号なのかというところから理解しないとね。
トップビットを単純に0にすればプラスの値に置き換わるというものでもないし。

例えば、1バイトの変数で言えば、-1はFFhだよね。
これのトップビットを倒すと、7Fhになる。
つまり、1にはならずに127になるよね。
2021/09/29(水) 19:09:56.88ID:UXZ9zF/70
VBAのウインドウの固定で行を選択するとA列に移動してしまうのはどうにかならない?
手動だとそのまま列でウインドウの固定になるから違いがよくわからん
2021/09/29(水) 21:29:48.02ID:7Q67NENAd
>>206
元の質問と、そこに付いてるレスをよく読んで
2021/09/29(水) 22:06:13.36ID:bAaW5g7mM
>>206
ゴタクはいいから
> 具体的に、動くコード書いてみて
って言われてるぞ
2021/09/29(水) 22:10:21.46ID:slA14A+y0
>>209
具体的なコードは昨日既に>>195で書いているな。
2021/09/29(水) 22:32:44.25ID:helTTC1Td
図解するとこういうことじゃないの?俺の理解が間違ってる?
https://i.imgur.com/z48adB1.jpg
212デフォルトの名無しさん (ワッチョイ 124f-E55q)
垢版 |
2021/09/29(水) 22:47:00.69ID:slA14A+y0
>>211
うん。それであってるよ。
ただ、.Netみたいにアンサインな型の変数が無いから
それをどうしようか、という話。
Longで普通に計算すると上位2バイトに65535(&HFFFF)辺りが入れば
例えば&HFFFF00000が入ったとして、4294901760が欲しいのに
普通にLong型だと-65536が取れちゃったりするよね。
2021/09/29(水) 23:33:48.06ID:slA14A+y0
あ、でも*-1する方法じゃダメか。
これはあくまでマイナスをプラスにする方法であって、トップビットが立っていてもプラスとみなす方法じゃないからね。
そう考えるとやっぱりもう少し幅の広い変数持っといて計算する方法が楽かな。

だからみんなByte型とか使ってたのかー。
なんか勉強になったわ。
2021/09/29(水) 23:39:44.93ID:+/PybBD+d
一つの例として、
Long[0]=&h00000000
Long[1]=&h00003E20
の時、得られるSingle値は0.15625になる
正しく計算できてるかどうか試してみればいい

>>191
Hexの戻り値は4桁とは限らないから、それでは正しく結合できないよ
2021/09/29(水) 23:43:02.21ID:+/PybBD+d
あまんり綺麗なコードじゃないけど、一応動くと思う
Option Explicit
Type tySingle
  varSingle As Single
End Type
Type ty4Byte
  Byte0 As Byte
  Byte1 As Byte
  Byte2 As Byte
  Byte3 As Byte
End Type

Sub Long2Single()
  Dim mySingle As tySingle
  Dim my4byte As ty4Byte
  Dim long0 As Long, long1 As Long
  long0 = &H0&
  long1 = &H3E20&
  my4byte.Byte0 = long0 And &HFF&
  my4byte.Byte1 = (long0 And &HFF00&) \ &H100&
  my4byte.Byte2 = long1 And &HFF&
  my4byte.Byte3 = (long1 And &HFF00&) \ &H100&
  LSet mySingle = my4byte
  Debug.Print mySingle.varSingle
End Sub
2021/09/30(木) 00:24:00.39ID:PZiEyg+B0
Option Explicit

Private Type TPLong
long0 As Long: long1 As Long
End Type
Private Type TPByte
byte0 As Byte: byte1 As Byte: byte2 As Byte: byte3 As Byte
byte4 As Byte: byte5 As Byte: byte6 As Byte: byte7 As Byte
End Type
Private Type TPSingle
single0 As Single: single1 As Single
End Type
Private Sub test()
Dim L As TPLong
Dim B As TPByte
Dim S As TPSingle

L.long0 = &H0
L.long1 = &H3E20&

LSet B = L
B.byte2 = B.byte4
B.byte3 = B.byte5

LSet S = B

Debug.Print S.single0

End Sub

動いた。改行多すぎって言われたので詰めて書いてる。
2021/09/30(木) 00:49:27.70ID:pCEIeulu0
>>214
それ、Longの上位下位どっち側にデータ入れるかによって
00 00 3E 20 で、数値表現としては &h3E200000 かもしれん
>>197はその前提で作ってるし>>211の図もそうだな

と思ったけど、HEX表現でそのまま連結してOKとか思ってるのか
3E 20 00 00 って格納してるのが正解なのか
エンディアンの呪いやっかいだなぁ
2021/09/30(木) 05:21:02.09ID:0qBy1lQqM
>>210
それツッコミないのはあまりにもレベル低いからだぞ…
2021/09/30(木) 06:14:58.44ID:gM2Bcn3cd
>>217
質問者が単純にHex関数の連結だけでOKだったと書いてるから、それぞれ下位16bitを使ってて、Long[0]が下位、Long[1]が上位側と読み取れる
まあ逆だったとしても簡単に修正できるし
220デフォルトの名無しさん (アウアウキー Saef-nXzz)
垢版 |
2021/09/30(木) 08:01:56.59ID:R3l1DBbza
質問する前に良く考えれば自力でできたんじゃね
2021/09/30(木) 09:52:07.40ID:Vb95uiyM0
VBAで標準モジュールを削除するコードを書いてるんだけど、消えない場合がなくね?
removeしてもそれがすぐに反映されない。
commitするようなコマンドてある?
222デフォルトの名無しさん (ラクッペペ MMde-XWMK)
垢版 |
2021/09/30(木) 10:02:50.98ID:R1d8oRoFM
ないならいいじゃん
2021/09/30(木) 10:06:49.68ID:XH3u7BFNM
「場合がなくね?」を「場合がない」と読むのは流石に揚げ足取りが過ぎる
2021/09/30(木) 10:16:54.23ID:eFhgF698M
なくね?
→なくない?
 ないよね?

言語仕様による違いかな
2021/09/30(木) 10:20:26.49ID:+bzcSAlDd
文脈から言い間違いだと気づけないのはアスペだそうですよ
2021/09/30(木) 10:58:49.96ID:SEX1vFKW0
> commitするようなコマンドてある?
 →commitが欲しい
  →なくね?は間違い

脳仕様による違いかな
2021/09/30(木) 12:35:11.89ID:Vb95uiyM0
調べるとこういうことが起こってるみたいだな。
https://try2explore.com/questions/jp/11366816

VBComponents.Remove呼び出しは、VBAの実行が停止した場合にのみ実際に有効になる場合があります。
つまり、すべてのステートメントが終了するまで、またはコードがブレークポイントに達してデバッグを停止するまで、
削除操作は有効になりません。
これは、新しいモジュールをインポートするか、既存のモジュールのコードを新しいモジュールに置き換えるための次のコードが原因で問題になります。
2021/09/30(木) 13:00:34.16ID:aMauK9B30
もう起こったぞ
2021/09/30(木) 19:03:25.50ID:gc4CAj+A0
クリリンのことかー
230デフォルトの名無しさん (ワッチョイ 2701-CiRx)
垢版 |
2021/09/30(木) 19:31:20.50ID:4/dpkDC70
>>220
多分ビット演算を知らないんだと思う
いずれにしてもバイナリごにょごにょはVBAには適さないとレス見てて改めて思った
2021/09/30(木) 20:06:00.47ID:aMauK9B30
バイナリならByte型でやればいいのにね
2021/09/30(木) 22:38:31.79ID:tyeheD170
for i=0 to 10
 if AAA(i) then Range("A1").offset(i,0)="OK"
next
↑こんな感じのfor文を書いたら普通に動いていたんだけど、

for i=0 to 10
 debug.print i, AAA(i)
 if AAA(i) then Range("A1").offset(i,0)="OK"
next
↑for文の中にdebug.printを入れたら、iが10になっても止まらず、
イミディエイトウィンドウ上に、「i, AAA(i)」の部分がずっとループして止まらなくなった。

こんなことってありえますか?
233デフォルトの名無しさん (ワッチョイ de8c-ysz4)
垢版 |
2021/09/30(木) 23:00:52.63ID:sFWbYEj80
AAA(i) って中身はなんだ
234デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
垢版 |
2021/09/30(木) 23:03:17.67ID:50MfSZL40
>232
i=i-1

i=3
みたいにiが永久に10を超えない動作が入るとそうなる
2021/09/30(木) 23:04:37.72ID:Vp0fi7DV0
普通に動いていると思っていただけで元々普通に動いてなかったとかはある
こんな感じのって言ってるから、そのソースそのまま受け取るわけには
いかんのだろうなって思った
2021/09/30(木) 23:16:32.92ID:VHGvetdVa
初心者の頃は手動でセル入力してた方が早く終わってしまうのが、もどかしくもあるけど
それでもvbaは覚えるべきだと思っていろいろ頑張ってます
237デフォルトの名無しさん (ワッチョイ de8c-ysz4)
垢版 |
2021/09/30(木) 23:22:00.84ID:sFWbYEj80
>>232 >>234
Function AAA(ByRef i As Variant) As Boolean
i = 3
AAA=True
End Function

こんな感じのじゃない?
2021/10/01(金) 00:46:48.32ID:85aYXoDy0
AAAはリストボックスです。
わかりにくかったので、listAとします。
中身はTRUEかFALSEです。

listA.list(0)がTRUEなら、A1セルにOKを入力
listA.list(1)がFALSEなら何もしない。
listA.list(2)がTRUEなら、A3セルにOKを入力

という処理でした。
debug.printを入れる前に動かした時は、画面が固まることもなく正常に終了しました。
debug.printを入れた後に動かしたらループが止まらなくなりました。

debug.printで出力されたiは、0→1→…→9→10→0→1→…というループではなくて、
0→1→…→9→10→6→7→8→9→10→6→…→10→6→…というループでした。

「debug.print i」がiの値に影響を与える、ということはないですもんね。
他の部分を明日あらためて確認してみます。
ありがとうございました。
2021/10/01(金) 17:55:16.70ID:fQjrPzOfa
クラスを使うメリットってなに?
2021/10/01(金) 19:26:10.62ID:aPfKzK/z0
見た目が美しい
2021/10/01(金) 19:29:13.73ID:AYkrwA2S0
自己満足
242デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
垢版 |
2021/10/01(金) 19:45:19.68ID:3/37uweO0
>>239
メソッドとプロパティが一箇所に集まって可視化しやすくなる
でもvbaのクラスは貧弱過ぎるので、モジュールで分けるのと大差ないという
2021/10/01(金) 19:47:27.08ID:4jCtmjal0
>>239
色々あるが、VBAのクラス機能はゴミなのでマジで自己満が多いと思う
解説サイトで玄人の技・隠し機能みたいなノリで紹介されてるので、使えるとプロっぽく見える。

@イベントやデフォルトメンバーみたいなオブジェクトモジュール専用の機能が使える
イベントをまとめたいとかで、仕方なしに、これ目的で使ってる人が多いと思う

A変数に値を入れて、その変数を色んな関数の引数にするっていう事が多々あるけど、
そういう「変数と関数」が常にペアになっているなら纏めた方が分かりやすい

B標準モジュールではモジュールレベルで宣言した変数は実行中保存される。
なので、ある関数でモジュールレベルの変数に値を保存して、別の関数で再利用みたいな使い方が出来る。
でも標準モジュールだと当然その変数に保存できる値は一つなので使い勝手が悪い。
クラスモジュールならインスタンスごとに別の値を保存できる
2021/10/01(金) 19:51:30.36ID:4jCtmjal0
この手の話題には「お前らは使いこなしてないからメリットを把握できてないが、俺は使いこなせてる」おじさんが来る
2021/10/01(金) 19:59:58.89ID:jrcl2rEY0
処理高速化するクラスくらいは単純だし使いまわせるし使ってもいいんじゃない
2021/10/01(金) 20:12:23.33ID:HK8CLsAI0
ただ単にすっきりして可読性がよい
クラスにしてると他人のコード化したときに何をしてるかもう一度把握するのが容易
自分でメソッドやプロパティを作るとファイルシステムオブジェクトやコレクションを扱い易くなる
2021/10/01(金) 20:33:12.85ID:4jCtmjal0
JSとかと違ってモジュール内に構文で記述できない(単体のモジュールファイルとしてしか書けない)から、
クラスモジュールを書くこと自体が億劫に感じて余り印象よくないわ
プロジェクト内だとどこからでも呼び出せるから、どこでどう使われてるのかサッパリだし

イベント機能とか状態保存を有効に使いたい、コレクションを自作したい、
みたいな特別な理由がない限り使わない方がいいんじゃないかなぁと思ってる
2021/10/01(金) 20:46:27.80ID:g1N/sLwpM
継承までは望まないとしてもせめてInitializeに引数を持てるようにして欲しかった
2021/10/01(金) 20:53:23.76ID:4jCtmjal0
>>248
Initializeはコンストラクタじゃなくてイベントだから、
仮に引数があってもオブジェクトモジュール内じゃないと使えない上に、
インスタンスごとにイベントハンドラ用のモジュールレベル変数が必要になって面倒だと思う
2021/10/01(金) 21:49:30.27ID:j+Pc2S4XM
イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w
2021/10/01(金) 22:01:08.86ID:4jCtmjal0
>>250
どう読んだらそういうレスになるの?
読解力のないバカはこれだから困る
2021/10/01(金) 22:07:37.29ID:CXdVtwXkM
>>251
はいはい、説明できないバカ乙
そもそもコンストラクタにすればいいだけの話だし
2021/10/01(金) 22:11:26.60ID:CmFZe7Ct0
質問者の環境や能力を無視すんなよ
2021/10/01(金) 22:24:35.99ID:4jCtmjal0
>>252
何をどう解釈したのか言ってくれれば対応できるけど、最早返答が意味不明過ぎるんだわ
何に対して「イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w」と疑問が沸いたのか説明して?
2021/10/01(金) 22:34:31.13ID:4jCtmjal0
>>252
あと、VBAのクラスに「引数が付いたコンストラクタが欲しいな」っていう希望から
「Initializeに引数を持てるようにして欲しかった」っていう要望が出たのは明白だろう

で、イベントに引数を渡すのは面倒だよねって話をしたら「コンストラクタにすればいい」ってのもよくわからん。
だったらイベント関係なしに、初めから使いやすいコンストラクタ相当の言語機能が定義されてた方がいいだろう
2021/10/01(金) 22:55:44.73ID:f1R1MoFX0
一般のObject指向言語で言うところの継承が使えないとか色々あるから普通にデザインパターンを考慮して作ろうとするとそこそこ制限受けるよね。

例えば継承が使えないからテンプレートメソッドパターンが使えないとか、

VB.Netで言うSharedが使えないからキチンとシングルトンパターン使おうとすると結構厄介だったりとか。

インターフェースが使えるから継承の代わりにストラテジーパターンでも使って組もうとか考えても限界あるし。

あ?コンストラクタに引数?
そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。

まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
他のObject指向言語やってる人って結構インターフェースの概念を疎かにしたりするしね。
2021/10/02(土) 02:59:35.03ID:xagjL2JO0
イベントに引数渡す(というか受け取る)のは別に面倒でもなんでないから
コンストラクタの引数をInitializeイベントに渡せたらまあそれもいいんだが
VBAだとInitializeイベントがオーバーロードできないからなぁ

まあもともとのVBがオブジェクト指向でもなんでもなかったとこからスタートしてるからな

俺はVBAのクラスは自作イベント使いたいときに使うものと思ってる
2021/10/02(土) 06:05:15.61ID:g1EUYVpxM
>>254-255
イベントだから何?って話
VBAでも引数を持つイベントはあるし、できない理由を必死に探してるだけにしか見えない
そもそもイベントとコンストラクタなんてある意味呼び方の問題だし
2021/10/02(土) 06:08:02.24ID:g1EUYVpxM
>>256
> あ?コンストラクタに引数?
> そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
> まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
そういうのは頭使うとは言わない
単に面倒(かつバグの元)なだけ
無い物ねだりすんなと言うならわかるけど
260デフォルトの名無しさん (ワッチョイ b3e6-SE+q)
垢版 |
2021/10/02(土) 07:21:09.62ID:f83gGEH/0
VB7を待て!
2021/10/02(土) 07:44:35.99ID:PmOXqFk20
>>259
言ってる意味が分からない。
生成した後初期化用のメソッド呼ぶだけだろ?
なんでそんなのが面倒でバグの元になるんだ?
お前はそんな程度でバグを生むソースを書くのか?
262デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
垢版 |
2021/10/02(土) 07:49:32.43ID:i6pQYLUQ0
それ言い出すとどんな言語でも「だけ」になるぞ
2021/10/02(土) 07:52:52.17ID:PmOXqFk20
それにポリモーフィズムを理解している奴ならむしろバグやUTケースを減らせるコードが書ける。
でなければObject指向なんてここまで浸透しなかっただろうよ。
2021/10/02(土) 07:53:44.67ID:PmOXqFk20
>>262
例えば?
2021/10/02(土) 08:50:27.63ID:7sXji/t3M
むしろ>>263の方に例えば?って言いたいわw
2021/10/02(土) 09:59:20.90ID:PmOXqFk20
>>265
学生なのか?
社会人であるなら上司から
質問を質問で返すようなマネはするなと
教わらなかったのか?

まぁいい
答えてくれれば答えよう
それが順序というものだ
2021/10/02(土) 10:26:50.08ID:SSNRs28sM
>>266
バカなの?
別人だし>>263は質問じゃねーし
まあまともな答えは期待してないから答えなくてもいいぞw
2021/10/02(土) 10:45:25.61ID:l9bGJwl90
>>267
お前はまた勉強する機会を損失した
ただそれだけのこと
2021/10/02(土) 11:55:15.97ID:SSNRs28sM
勉強?
からかわれてることぐらいは理解した方がいいぞw
2021/10/02(土) 11:56:22.57ID:h3OHY9Ln0
まあまあ、通りがかりの者だけど、お前ら仲良くやれや
2021/10/02(土) 12:17:57.73ID:4Bm9Y75Jp
まったく最近のじじいは
マウントどうのとかほざくくせに
負けず嫌いで困る
2021/10/02(土) 12:26:19.80ID:s0PycLWJM
5chはじじいの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。
273デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
垢版 |
2021/10/02(土) 17:44:59.50ID:i6pQYLUQ0
>>264
クラスにコンストラクタがない
→newの後にメソッドなりで中身かえればいい「だけ」

それを言い出すとクラスそのものもなくてもどうにでもできるだろって話になる
そうじゃなくて、そんなめんどくさいことを「今更」したくないって話なんだ

それが苦にならないor自分で既にそれらを自動化するライブラリがある!ってなら問題ないと思うよ
君の言ってる事は間違いではない。単に感覚の違いだ


ただ、俺はやだなぁ
ついでに言うとarrayにpushはマジで欲しい
2021/10/02(土) 17:50:29.29ID:ffSwt3TR0
>>273
したくないのは自由だが、いまさらVBAが更新されることはないから、諦めて他の言語に行ってくれ
2021/10/02(土) 18:23:04.84ID:xagjL2JO0
>>263
ちゃんとしたオブジェクト指向言語使えば減らせるってならともかく
VBAでオブジェクト指向でやってUTケース減らせると思えんが

ちょっとVBA関係ない話になるが
お前の思うポリモーフィズムと引数付きコンストラクタの使いどころ教えてくれ
2021/10/02(土) 18:24:23.99ID:yfSowQXWM
>>274
> いまさらVBAが更新されることはないから
みんなそんなことはわかってるけどいきなりどうしたw
2021/10/02(土) 18:35:12.83ID:ffSwt3TR0
>>276
無駄な議論する意味なしでしょ
VBAの質問スレだし
2021/10/02(土) 19:02:41.91ID:/B20gKTEM
ああ確かにそうだな
そりゃすまん
2021/10/02(土) 21:28:02.67ID:PmOXqFk20
>>275
そうだな、ちょっとその前に
例えば一つの例としてゲームを作ったとしよう。
それは簡単なシューティングゲームだったとして、
キャラクターの中に自機、弾、敵、ヒットマークがあったとする。
キャラクター数の上限は考えないものとし、敵は幾つか種類がいるものとして、ひとつは地形判定を行う、一つは弾を打つ、等の違いがあった場合、
君ならどう作るか聞いてもいいかな?

質問を質問で返すようなことするなと言っておいて悪いが最初に認識を合わせるために聞いておきたい。
2021/10/02(土) 21:48:51.07ID:PmOXqFk20
>>273
そもそも論として、クラスを使わなければ何か出来ないことがあるかと言われれば、それはあまり思い付かない。
ただ、VBAでクラスのコンストラクタに引数を持ってないという程度であればそれで代用が効くだろうという話。
それも面倒だというのであれば、クラスを生成して初期化するメソッドを作ってそれに引数を持たせるようにして呼び出せばいくつそういう場所があっても一回書いておけばいいということになる。
2021/10/03(日) 05:20:08.91ID:fyf/YlYy0
>>279
認識あわせの例がシューティングゲームとかその時点でお前とは合わんわ
シューティングゲームとか作らんし、その想定でどう作るとか言われてもな
まあ一から全部作ることはないし、何らかのフレームワークに従って作るんじゃね
そんな細かい実装的な話を聞きたいんじゃないんだよ
2021/10/03(日) 07:39:28.72ID:8uofczFap
>>281
話が合わないというのには同意だ
新しい何かを作る際にその構成が考えられない人に説明しろと言われてもな。
VBAスレでフレームワークとかも持ち出す意味ないしな。
283デフォルトの名無しさん (ワッチョイ 6f8c-GArm)
垢版 |
2021/10/03(日) 11:58:59.58ID:Lx3l1CXP0
ガンダムで例えてくれ
284デフォルトの名無しさん (ワッチョイ cfda-vizG)
垢版 |
2021/10/03(日) 12:18:23.19ID:PztuncMq0
坊やだからさ
285デフォルトの名無しさん (アウアウウー Sa27-jOtc)
垢版 |
2021/10/03(日) 12:51:23.55ID:oCTMWA/sa
excel+vbaでマインスイーパーは造れますか?
どこかにソースありますか?
2021/10/03(日) 12:54:45.72ID:cPfMe0TfM
>>285
考えただけでも簡単そう
ソースはしらんけど
2021/10/03(日) 13:18:38.78ID:PZL9KPgcM
vba minesweeper code でググれ
288デフォルトの名無しさん (ワッチョイ e301-QRk2)
垢版 |
2021/10/03(日) 22:35:03.42ID:x8fdTISD0
教えて下さい
ガンチャート形式の日程表で
日付の色塗りだけじゃなくて
タスク表示(その日の予定)もさせたいんだけど
どう関数組んだらいい?
2021/10/03(日) 23:22:18.21ID:VDfIFkhd0
>>288
ガントチャート形式の日程表とやらの構成はどうなっている?
日付の色塗りとは、何を指している?
タスク表示とは、タスク名?をどこに表示させることを言っている?

このへん予め提示しないと解決が長引くよ
2021/10/04(月) 00:04:37.41ID:j9cfwAH/0
>>288
セルサイズを大きくしてタスクを入力すればいい
291デフォルトの名無しさん (ワッチョイ 6f8c-GArm)
垢版 |
2021/10/04(月) 01:17:19.95ID:BaE5qGe00
excel ガントチャート フリーで検索
2021/10/04(月) 09:25:56.63ID:dlhTdODc0
質問失礼します
タイマーで二つのマクロを順番に実行したいのですが
ひとつめのマクロ実行が長引いてしまい
マクロ実行中にApplication.OnTimeのcallで次のマクロが動くとエラーになってしまいます
Application.OnTimeの時間になっても前のマクロが終わるまで待つやぶつからなくする方法はあるでしょうか?
2021/10/04(月) 09:37:56.41ID:X/RNGavO0
>>292
へ?
ひとつ目の実行開始時に処理中フラグ立てて
実行終了時に倒すようにして
それ見て二つ目のマクロの処理を飛ばすか
待たせてまた実行するかすればいいんじゃないの?
聞いてる意味違う?
2021/10/04(月) 10:15:29.97ID:dlhTdODc0
>>293
はいあっています
処理中のフラグでぐぐると色々出てきました
困っていたので助かりました
ありがとうございます
2021/10/04(月) 10:57:06.41ID:JQlH+vDNM
ontimeの第3引数も調べてね
2021/10/04(月) 12:27:18.56ID:kyO84GtQa
関数に引数が七つも八つもあるとわかりにくくなるから、それならクラスにしておけば、可読性が良くなるのかな
2021/10/04(月) 12:54:51.17ID:X/RNGavO0
>>296
そうね。
ただVBAのクラスは1クラス1モジュール使ってしまうのと、クラスが格納されているフォルダが一階層しか使えないからネーミングに気を付けて後でそれがそういう意味を持つクラスだって分かるようにしておかないとね。

後、あれやこれやと引数のクラス作らなくても、引数として格納する変数が一意でいい場合は標準モジュールでも同じように作れば使えるよ。

ただしこの場合は引数として渡すんじゃなくてその標準モジュール側に作ったプロパティを直接読みに行くことになるけどね。まぁ使い分けだね。
2021/10/04(月) 13:39:00.82ID:1MgeDxIh0
マクロを実行させると、Excelが落ちてしまい、
ステップ実行させるとマクロが正常終了orExcelが落ちない
ていう事になってるんだが、
どこで異常終了してるか調べる方法ある?
2021/10/04(月) 13:41:09.43ID:X/RNGavO0
>>298
ブレイクポイント貼りまくりで
徐々に外して落ちてる範囲を狭めて
最終的ににどこで落ちてるか確定させる
2021/10/04(月) 13:54:27.50ID:X/RNGavO0
上記のやり方が大変だというのであれば
Logをどこかのtxtファイルにはく、という手もある。
2021/10/04(月) 14:13:00.80ID:1MgeDxIh0
>>299,300
ブレイクポイントを貼ると落ちない。
なんとなくやばい場所は分かってるんだけど、on errorでもcatchできないんだよな。
やってることは、 uiautomationを使ってコンボボックス叩く(Expand)てことやってるんだが、
おそらくその行で落ちるんだが、
落ちずに成功する場合もあるんだよな。
2021/10/04(月) 14:34:03.70ID:AbV0YbaI0
>>301
WinAPIで似たような事があった
本来待ち時間が必要な処理を待たずに次へ行くからブレイクポイント無しだと落ちるってケースね
怪しい所にSleep関数使って500ミリ秒待たせたら落ちなくなった事があるよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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