!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
Excel VBA 質問スレ Part73
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 4668-xJJl)
2021/09/13(月) 07:29:59.47ID:GNx0xRRz0171デフォルトの名無しさん (ササクッテロレ Sp47-2mxq)
2021/09/26(日) 01:51:41.55ID:vU9Y5LAHp172デフォルトの名無しさん (ワッチョイ e32f-pveB)
2021/09/26(日) 15:56:59.18ID:ynzNBMLj0173デフォルトの名無しさん (アウアウクー MM87-b517)
2021/09/26(日) 18:28:19.91ID:6z2Q/VJPM 二次元配列の第三カラムが重複していたらレコードまるごと排除して、かつ排除された分のレコードを別シートに転記することってできます?
連想配列に入れておけば重複してたらわかるようになるけど、そういう方法ってまとも?
連想配列に入れておけば重複してたらわかるようになるけど、そういう方法ってまとも?
174デフォルトの名無しさん (ワッチョイ 3710-Lx95)
2021/09/26(日) 18:29:58.19ID:Fsa0c3oL0 第三限定なの?
175デフォルトの名無しさん (ワッチョイ d6da-zD50)
2021/09/26(日) 19:28:17.19ID:HYuUGx6O0 できるかどうかではなく、そういう処理を作りたいんじゃないの?
176デフォルトの名無しさん (ブーイモ MM0e-MTek)
2021/09/26(日) 21:42:42.58ID:hcQxkCQHM 配列とレコードとシートの区別ない人だね
177デフォルトの名無しさん (ワッチョイ 0349-PXWQ)
2021/09/26(日) 23:35:14.87ID:ISHRJ32V0 そういう方法で重複チェックをしたことはあるけど
それがまともかと聞かれるとわからんなぁ
それがまともかと聞かれるとわからんなぁ
178デフォルトの名無しさん (ワッチョイ e32f-pveB)
2021/09/27(月) 17:52:26.41ID:wG/2iXK70 配列は要素数が増減するものには向いてない
が、まあいろいろ頑張ればできる
連想配列でわかるのは、入れようとしたときに重複するかどうかで、そもそも重複したものは入っていないだろ
が、まあいろいろ頑張ればできる
連想配列でわかるのは、入れようとしたときに重複するかどうかで、そもそも重複したものは入っていないだろ
179デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
2021/09/27(月) 21:07:52.71ID:9JOCRyj50 >配列は要素数が増減するものには向いてない
「vbaの」配列な
他の言語にはpushとか色々便利なものがあるんやで
「vbaの」配列な
他の言語にはpushとか色々便利なものがあるんやで
180デフォルトの名無しさん (ワッチョイ b35f-AXm8)
2021/09/27(月) 21:09:45.06ID:1fIlBTl00 Excelにはセルっていう使いやすい2次元配列があるからな
速度はご愛嬌
速度はご愛嬌
181デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
2021/09/27(月) 23:17:35.36ID:9JOCRyj50 シート入れれば三次元やぞ
182デフォルトの名無しさん (ドコグロ MM33-c1VD)
2021/09/28(火) 06:06:35.41ID:NhFpYAOsM >>179
> 他の言語にはpushとか色々便利なものがあるんやで
スクリプト言語とかだろそれ
言語自体の機能として配列のサイズを変えられる言語はそんなに多くないよ
そもそもVBAはその多くない言語に含まれるし
> 他の言語にはpushとか色々便利なものがあるんやで
スクリプト言語とかだろそれ
言語自体の機能として配列のサイズを変えられる言語はそんなに多くないよ
そもそもVBAはその多くない言語に含まれるし
183デフォルトの名無しさん (ワッチョイ 124f-WaYq)
2021/09/28(火) 11:35:58.86ID:mkxQja700 無いものねだりしてもしょうがない
そもそも他言語やっててVBAやった場合
ない機能をどうやって実装するか考えるのが
醍醐味なんだから
そもそも他言語やっててVBAやった場合
ない機能をどうやって実装するか考えるのが
醍醐味なんだから
184デフォルトの名無しさん (ワッチョイ 92ad-mV7G)
2021/09/28(火) 12:14:47.38ID:fFhZgLlN0185デフォルトの名無しさん (ドコグロ MM33-c1VD)
2021/09/28(火) 13:45:05.92ID:T/P4fEdFM186デフォルトの名無しさん (ブーイモ MMde-MTek)
2021/09/28(火) 15:11:07.44ID:8+n9QyO8M 今の時代、メモリなんてたくさん確保しておけばよくね
187デフォルトの名無しさん (ワッチョイ 6f8e-emG0)
2021/09/28(火) 15:43:04.78ID:ZLV/p08A0 「たくさん」と言ったってワークステーションやサーバ系のハードウェアでない限りせいぜい64GBか128GBが上限では?
188デフォルトの名無しさん (ブーイモ MM0e-MTek)
2021/09/28(火) 15:46:57.39ID:9IVurO/LM お、おう
189デフォルトの名無しさん (ワッチョイ 4be5-XWMK)
2021/09/28(火) 16:43:48.67ID:yyyanN8B0 64KBまでだよ
190デフォルトの名無しさん (ワッチョイ 4fac-ewuB)
2021/09/28(火) 16:48:32.26ID:vws8rDV40 VBA(Excel)にそんなメモリ使わせたらヒヤヒヤしちゃう
191デフォルトの名無しさん (ワッチョイ 96bb-PL4X)
2021/09/28(火) 17:35:37.46ID:Fgmzo9M90 long配列の下位16ビットにデータ格納されている
long[0],[1]の下位16ビットを結合するとsingleの値となる
(要はsingleが16ビット分割されてlong型に格納されている)
こんなデータが大量に格納されるんですが、上手く結合して型変換する方法がわかりません。。
val("&H" & hex(long(1)) & hex(long(0)))
で32ビット結合はできましたが、その後の暗黙的な変換なしでsingleに変更するにはどうするのが良いでしょうか?
long[0],[1]の下位16ビットを結合するとsingleの値となる
(要はsingleが16ビット分割されてlong型に格納されている)
こんなデータが大量に格納されるんですが、上手く結合して型変換する方法がわかりません。。
val("&H" & hex(long(1)) & hex(long(0)))
で32ビット結合はできましたが、その後の暗黙的な変換なしでsingleに変更するにはどうするのが良いでしょうか?
192デフォルトの名無しさん (ワッチョイ 0349-PXWQ)
2021/09/28(火) 18:37:14.39ID:nfdxFkKa0 リアルタイムにやる必要が無いならバイナリでファイルに書いて
Singleで読むとか出来そうな気がする。
同じ考え方でADODB.stremも使えそう。
Singleで読むとか出来そうな気がする。
同じ考え方でADODB.stremも使えそう。
193デフォルトの名無しさん (スップ Sd32-zD50)
2021/09/28(火) 20:20:03.83ID:chK2kmIxd >>191
禁じ手だけどユーザー定義型とLSetで変数の中身を型変換せずに直接コピーできる
LongをSingleにコピーする例
Type TypeLong
varLong As Long
End Type
Type TypeSingle
varSingle As Single
End Type
Sub Long2Single()
Dim myLong As TypeLong
Dim mySingle As TypeSingle
LSet mySingle = myLong
End Sub
禁じ手だけどユーザー定義型とLSetで変数の中身を型変換せずに直接コピーできる
LongをSingleにコピーする例
Type TypeLong
varLong As Long
End Type
Type TypeSingle
varSingle As Single
End Type
Sub Long2Single()
Dim myLong As TypeLong
Dim mySingle As TypeSingle
LSet mySingle = myLong
End Sub
194デフォルトの名無しさん (ワッチョイ 124f-E55q)
2021/09/28(火) 21:06:13.76ID:mkxQja700 >>191
ん?
今一つよく分からんけど、CSng使って明示的に変換すればいいんじゃないの?
Sub Convert()
Dim originalValue(1) As Long
Dim convertSingle As Single
originalValue(0) = 1
originalValue(1) = 3
convertSingle = CSng(CDbl(originalValue(0) And 65535)) * 65536 + (originalValue(1) And 65535)
Debug.Print convertSingle
End Sub
こんな感じに。
オーバーフローして表示しきれなくなった分は知らんけど。
ん?
今一つよく分からんけど、CSng使って明示的に変換すればいいんじゃないの?
Sub Convert()
Dim originalValue(1) As Long
Dim convertSingle As Single
originalValue(0) = 1
originalValue(1) = 3
convertSingle = CSng(CDbl(originalValue(0) And 65535)) * 65536 + (originalValue(1) And 65535)
Debug.Print convertSingle
End Sub
こんな感じに。
オーバーフローして表示しきれなくなった分は知らんけど。
195デフォルトの名無しさん (ワッチョイ 124f-E55q)
2021/09/28(火) 21:56:37.27ID:mkxQja700 おっと、すまんこ
括弧の位置間違えてた
Option Explicit
Sub Convert()
Dim originalValue(1) As Long
Dim convertSingle As Single
originalValue(0) = 7
originalValue(1) = 15
convertSingle = CSng(CDbl(originalValue(0) And 65535) * 65536 + (originalValue(1) And 65535))
Debug.Print convertSingle
End Sub
こうかな。
因みにビット扱っているなら説明すると失礼に当たるかもだけど、
65535は16進で&HFFFF、65536は16進で&H10000ね。
ANDは論理演算子ではなくてビット演算子。
括弧の位置間違えてた
Option Explicit
Sub Convert()
Dim originalValue(1) As Long
Dim convertSingle As Single
originalValue(0) = 7
originalValue(1) = 15
convertSingle = CSng(CDbl(originalValue(0) And 65535) * 65536 + (originalValue(1) And 65535))
Debug.Print convertSingle
End Sub
こうかな。
因みにビット扱っているなら説明すると失礼に当たるかもだけど、
65535は16進で&HFFFF、65536は16進で&H10000ね。
ANDは論理演算子ではなくてビット演算子。
196デフォルトの名無しさん (ワッチョイ e32f-pveB)
2021/09/29(水) 02:45:23.84ID:DNRsGaHg0197デフォルトの名無しさん (ワッチョイ e32f-pveB)
2021/09/29(水) 02:50:45.14ID:DNRsGaHg0 とりあえず作ってみた
エンディアンの呪いがかかってても知らんw
Type TypeQByte
varByte1 As Byte
varByte2 As Byte
varByte3 As Byte
varByte4 As Byte
End Type
Type TypeLong
varLong As Long
End Type
Type TypeSingle
varSingle As Single
End Type
Function WLong2Single(ByVal long1 As Long, ByVal long2 As Long) As Single
Dim myLong1 As TypeLong
Dim myLong2 As TypeLong
Dim myQByte As TypeQByte
Dim tmpQByte As TypeQByte
Dim mySingle As TypeSingle
myLong1.varLong = long1
myLong2.varLong = long2
LSet tmpQByte = myLong1
myQByte.varByte1 = tmpQByte.varByte3
myQByte.varByte2 = tmpQByte.varByte4
LSet tmpQByte = myLong2
myQByte.varByte3 = tmpQByte.varByte3
myQByte.varByte4 = tmpQByte.varByte4
LSet mySingle = myQByte
WLong2Single = mySingle.varSingle
End Function
エンディアンの呪いがかかってても知らんw
Type TypeQByte
varByte1 As Byte
varByte2 As Byte
varByte3 As Byte
varByte4 As Byte
End Type
Type TypeLong
varLong As Long
End Type
Type TypeSingle
varSingle As Single
End Type
Function WLong2Single(ByVal long1 As Long, ByVal long2 As Long) As Single
Dim myLong1 As TypeLong
Dim myLong2 As TypeLong
Dim myQByte As TypeQByte
Dim tmpQByte As TypeQByte
Dim mySingle As TypeSingle
myLong1.varLong = long1
myLong2.varLong = long2
LSet tmpQByte = myLong1
myQByte.varByte1 = tmpQByte.varByte3
myQByte.varByte2 = tmpQByte.varByte4
LSet tmpQByte = myLong2
myQByte.varByte3 = tmpQByte.varByte3
myQByte.varByte4 = tmpQByte.varByte4
LSet mySingle = myQByte
WLong2Single = mySingle.varSingle
End Function
198デフォルトの名無しさん (スップ Sd52-zD50)
2021/09/29(水) 03:32:54.18ID:hT//j47fd VBAには共用体もポインタもないから、
LSetでメモリの内容をコピー
バイナリファイル経由
IEEEの内部フォーマットに合わせてゴリゴリ計算
ぐらいしか思い付かん
この中ではLsetが一番シンプルだし高速
上位、下位の順番が分からんから適当に書くけど、基本的にはこんな感じ
MyLong = Long0 * &h10000 + Long1
Lset MySingle = MyLong
C#とか使えばもっと簡単にできるんで、そもそもこの作業はVBAに向いてない
LSetでメモリの内容をコピー
バイナリファイル経由
IEEEの内部フォーマットに合わせてゴリゴリ計算
ぐらいしか思い付かん
この中ではLsetが一番シンプルだし高速
上位、下位の順番が分からんから適当に書くけど、基本的にはこんな感じ
MyLong = Long0 * &h10000 + Long1
Lset MySingle = MyLong
C#とか使えばもっと簡単にできるんで、そもそもこの作業はVBAに向いてない
199デフォルトの名無しさん (ワッチョイ e32f-pveB)
2021/09/29(水) 04:17:58.49ID:DNRsGaHg0200デフォルトの名無しさん (スプッッ Sdea-zD50)
2021/09/29(水) 05:23:25.92ID:HULqg2bxd 符号ビット対策
64bit限定ならLongLong型を経由すればもっと簡単になるのか?どう書けばいいのかわからんけど
Dim MSB As Long
MSB = (Long0 And &H8000) And &H80000000
MyLong = MSB Or ((Long0 And &H7FFF) * &H10000 + Long1)
64bit限定ならLongLong型を経由すればもっと簡単になるのか?どう書けばいいのかわからんけど
Dim MSB As Long
MSB = (Long0 And &H8000) And &H80000000
MyLong = MSB Or ((Long0 And &H7FFF) * &H10000 + Long1)
201デフォルトの名無しさん (スフッ Sd32-zD50)
2021/09/29(水) 05:43:02.15ID:ia9ebpqvd 訂正
MSB = ((Long0 And &H8000) <> 0) And &H80000000
MSB = ((Long0 And &H8000) <> 0) And &H80000000
202デフォルトの名無しさん (ワッチョイ 124f-WaYq)
2021/09/29(水) 08:25:13.60ID:slA14A+y0 >>201
いや、Longの中に入っている時点でマイナスなら* -1してやればいいだけだけど、だったらもっと範囲の広い型で後ろ2バイト以外クリアする方が分岐もなくスッキリするだろう
いや、Longの中に入っている時点でマイナスなら* -1してやればいいだけだけど、だったらもっと範囲の広い型で後ろ2バイト以外クリアする方が分岐もなくスッキリするだろう
203デフォルトの名無しさん (スフッ Sd32-zD50)
2021/09/29(水) 08:41:09.05ID:+gGxbszWd >>202
元データの上位2バイトが00で埋まってた場合、論理シフトで符号が変わる場合があるでしょ
VBAには論理シフトがないから、何か別の方法で再現する必要があると思うんだけど
具体的に、動くコード書いてみて
元データの上位2バイトが00で埋まってた場合、論理シフトで符号が変わる場合があるでしょ
VBAには論理シフトがないから、何か別の方法で再現する必要があると思うんだけど
具体的に、動くコード書いてみて
204デフォルトの名無しさん (ブーイモ MM0e-PL4X)
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
定義(追加部分のみ)
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
205デフォルトの名無しさん (スプッッ Sdea-zD50)
2021/09/29(水) 09:40:16.79ID:f5tfMzLod206デフォルトの名無しさん (ワッチョイ 124f-WaYq)
2021/09/29(水) 12:56:20.18ID:slA14A+y0 >>203
ちょっと何を言ってるか分かりませんね。
まずシフトの話はどこから出てきたの?
Long型ならマイナスであれば常にトップビットは
立っているよね?
だからプラスに変換するってことだけど?
トップビットが立っていなければプラスなんで変換する必要はない。
もちろん、最初の設定値のLong型の下位2バイトでマイナスを表現するならそれぞれ*-1してやらなきゃいけないけど>>191を見た限りではそのような扱いでもないしね。
途中でマイナスをもつような型の変数に入れるなら
その後始末をしないといけないというだけ。
そもそもトップビットがなぜ符号なのかというところから理解しないとね。
トップビットを単純に0にすればプラスの値に置き換わるというものでもないし。
例えば、1バイトの変数で言えば、-1はFFhだよね。
これのトップビットを倒すと、7Fhになる。
つまり、1にはならずに127になるよね。
ちょっと何を言ってるか分かりませんね。
まずシフトの話はどこから出てきたの?
Long型ならマイナスであれば常にトップビットは
立っているよね?
だからプラスに変換するってことだけど?
トップビットが立っていなければプラスなんで変換する必要はない。
もちろん、最初の設定値のLong型の下位2バイトでマイナスを表現するならそれぞれ*-1してやらなきゃいけないけど>>191を見た限りではそのような扱いでもないしね。
途中でマイナスをもつような型の変数に入れるなら
その後始末をしないといけないというだけ。
そもそもトップビットがなぜ符号なのかというところから理解しないとね。
トップビットを単純に0にすればプラスの値に置き換わるというものでもないし。
例えば、1バイトの変数で言えば、-1はFFhだよね。
これのトップビットを倒すと、7Fhになる。
つまり、1にはならずに127になるよね。
207デフォルトの名無しさん (ワッチョイ b35f-8sCx)
2021/09/29(水) 19:09:56.88ID:UXZ9zF/70 VBAのウインドウの固定で行を選択するとA列に移動してしまうのはどうにかならない?
手動だとそのまま列でウインドウの固定になるから違いがよくわからん
手動だとそのまま列でウインドウの固定になるから違いがよくわからん
208デフォルトの名無しさん (スフッ Sd32-zD50)
2021/09/29(水) 21:29:48.02ID:7Q67NENAd >>206
元の質問と、そこに付いてるレスをよく読んで
元の質問と、そこに付いてるレスをよく読んで
209デフォルトの名無しさん (ドコグロ MMde-c1VD)
2021/09/29(水) 22:06:13.36ID:bAaW5g7mM210デフォルトの名無しさん (ワッチョイ 124f-WaYq)
2021/09/29(水) 22:10:21.46ID:slA14A+y0211デフォルトの名無しさん (スフッ Sd32-PL4X)
2021/09/29(水) 22:32:44.25ID:helTTC1Td 図解するとこういうことじゃないの?俺の理解が間違ってる?
https://i.imgur.com/z48adB1.jpg
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が取れちゃったりするよね。
うん。それであってるよ。
ただ、.Netみたいにアンサインな型の変数が無いから
それをどうしようか、という話。
Longで普通に計算すると上位2バイトに65535(&HFFFF)辺りが入れば
例えば&HFFFF00000が入ったとして、4294901760が欲しいのに
普通にLong型だと-65536が取れちゃったりするよね。
213デフォルトの名無しさん (ワッチョイ 124f-WaYq)
2021/09/29(水) 23:33:48.06ID:slA14A+y0 あ、でも*-1する方法じゃダメか。
これはあくまでマイナスをプラスにする方法であって、トップビットが立っていてもプラスとみなす方法じゃないからね。
そう考えるとやっぱりもう少し幅の広い変数持っといて計算する方法が楽かな。
だからみんなByte型とか使ってたのかー。
なんか勉強になったわ。
これはあくまでマイナスをプラスにする方法であって、トップビットが立っていてもプラスとみなす方法じゃないからね。
そう考えるとやっぱりもう少し幅の広い変数持っといて計算する方法が楽かな。
だからみんなByte型とか使ってたのかー。
なんか勉強になったわ。
214デフォルトの名無しさん (スプッッ Sdea-zD50)
2021/09/29(水) 23:39:44.93ID:+/PybBD+d 一つの例として、
Long[0]=&h00000000
Long[1]=&h00003E20
の時、得られるSingle値は0.15625になる
正しく計算できてるかどうか試してみればいい
>>191
Hexの戻り値は4桁とは限らないから、それでは正しく結合できないよ
Long[0]=&h00000000
Long[1]=&h00003E20
の時、得られるSingle値は0.15625になる
正しく計算できてるかどうか試してみればいい
>>191
Hexの戻り値は4桁とは限らないから、それでは正しく結合できないよ
215デフォルトの名無しさん (スプッッ Sdea-zD50)
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
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
216デフォルトの名無しさん (ワッチョイ 0349-PXWQ)
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
動いた。改行多すぎって言われたので詰めて書いてる。
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
動いた。改行多すぎって言われたので詰めて書いてる。
217デフォルトの名無しさん (ワッチョイ e32f-pveB)
2021/09/30(木) 00:49:27.70ID:pCEIeulu0218デフォルトの名無しさん (ドコグロ MMde-c1VD)
2021/09/30(木) 05:21:02.09ID:0qBy1lQqM >>210
それツッコミないのはあまりにもレベル低いからだぞ…
それツッコミないのはあまりにもレベル低いからだぞ…
219デフォルトの名無しさん (スフッ Sd32-zD50)
2021/09/30(木) 06:14:58.44ID:gM2Bcn3cd >>217
質問者が単純にHex関数の連結だけでOKだったと書いてるから、それぞれ下位16bitを使ってて、Long[0]が下位、Long[1]が上位側と読み取れる
まあ逆だったとしても簡単に修正できるし
質問者が単純にHex関数の連結だけでOKだったと書いてるから、それぞれ下位16bitを使ってて、Long[0]が下位、Long[1]が上位側と読み取れる
まあ逆だったとしても簡単に修正できるし
220デフォルトの名無しさん (アウアウキー Saef-nXzz)
2021/09/30(木) 08:01:56.59ID:R3l1DBbza 質問する前に良く考えれば自力でできたんじゃね
221デフォルトの名無しさん (ワッチョイ c23d-4IKK)
2021/09/30(木) 09:52:07.40ID:Vb95uiyM0 VBAで標準モジュールを削除するコードを書いてるんだけど、消えない場合がなくね?
removeしてもそれがすぐに反映されない。
commitするようなコマンドてある?
removeしてもそれがすぐに反映されない。
commitするようなコマンドてある?
222デフォルトの名無しさん (ラクッペペ MMde-XWMK)
2021/09/30(木) 10:02:50.98ID:R1d8oRoFM ないならいいじゃん
223デフォルトの名無しさん (ブーイモ MM0e-/zTl)
2021/09/30(木) 10:06:49.68ID:XH3u7BFNM 「場合がなくね?」を「場合がない」と読むのは流石に揚げ足取りが過ぎる
224デフォルトの名無しさん (ブーイモ MM0e-MTek)
2021/09/30(木) 10:16:54.23ID:eFhgF698M なくね?
→なくない?
ないよね?
言語仕様による違いかな
→なくない?
ないよね?
言語仕様による違いかな
225デフォルトの名無しさん (スプッッ Sdea-zD50)
2021/09/30(木) 10:20:26.49ID:+bzcSAlDd 文脈から言い間違いだと気づけないのはアスペだそうですよ
226デフォルトの名無しさん (ワッチョイ d668-zD50)
2021/09/30(木) 10:58:49.96ID:SEX1vFKW0 > commitするようなコマンドてある?
→commitが欲しい
→なくね?は間違い
脳仕様による違いかな
→commitが欲しい
→なくね?は間違い
脳仕様による違いかな
227デフォルトの名無しさん (ワッチョイ c23d-4IKK)
2021/09/30(木) 12:35:11.89ID:Vb95uiyM0 調べるとこういうことが起こってるみたいだな。
https://try2explore.com/questions/jp/11366816
VBComponents.Remove呼び出しは、VBAの実行が停止した場合にのみ実際に有効になる場合があります。
つまり、すべてのステートメントが終了するまで、またはコードがブレークポイントに達してデバッグを停止するまで、
削除操作は有効になりません。
これは、新しいモジュールをインポートするか、既存のモジュールのコードを新しいモジュールに置き換えるための次のコードが原因で問題になります。
https://try2explore.com/questions/jp/11366816
VBComponents.Remove呼び出しは、VBAの実行が停止した場合にのみ実際に有効になる場合があります。
つまり、すべてのステートメントが終了するまで、またはコードがブレークポイントに達してデバッグを停止するまで、
削除操作は有効になりません。
これは、新しいモジュールをインポートするか、既存のモジュールのコードを新しいモジュールに置き換えるための次のコードが原因で問題になります。
228デフォルトの名無しさん (ワッチョイ d6da-zD50)
2021/09/30(木) 13:00:34.16ID:aMauK9B30 もう起こったぞ
229デフォルトの名無しさん (ワッチョイ 9242-d6h8)
2021/09/30(木) 19:03:25.50ID:gc4CAj+A0 クリリンのことかー
230デフォルトの名無しさん (ワッチョイ 2701-CiRx)
2021/09/30(木) 19:31:20.50ID:4/dpkDC70231デフォルトの名無しさん (ワッチョイ d6da-zD50)
2021/09/30(木) 20:06:00.47ID:aMauK9B30 バイナリならByte型でやればいいのにね
232デフォルトの名無しさん (ワッチョイ 12ad-zD50)
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)」の部分がずっとループして止まらなくなった。
こんなことってありえますか?
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を超えない動作が入るとそうなる
i=i-1
や
i=3
みたいにiが永久に10を超えない動作が入るとそうなる
235デフォルトの名無しさん (ワッチョイ 0349-PXWQ)
2021/09/30(木) 23:04:37.72ID:Vp0fi7DV0 普通に動いていると思っていただけで元々普通に動いてなかったとかはある
こんな感じのって言ってるから、そのソースそのまま受け取るわけには
いかんのだろうなって思った
こんな感じのって言ってるから、そのソースそのまま受け取るわけには
いかんのだろうなって思った
236デフォルトの名無しさん (アウアウウー Sa43-E/Tk)
2021/09/30(木) 23:16:32.92ID:VHGvetdVa 初心者の頃は手動でセル入力してた方が早く終わってしまうのが、もどかしくもあるけど
それでもvbaは覚えるべきだと思っていろいろ頑張ってます
それでもvbaは覚えるべきだと思っていろいろ頑張ってます
237デフォルトの名無しさん (ワッチョイ de8c-ysz4)
2021/09/30(木) 23:22:00.84ID:sFWbYEj80238232 (ワッチョイ ffad-2jfQ)
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の値に影響を与える、ということはないですもんね。
他の部分を明日あらためて確認してみます。
ありがとうございました。
わかりにくかったので、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の値に影響を与える、ということはないですもんね。
他の部分を明日あらためて確認してみます。
ありがとうございました。
239デフォルトの名無しさん (アウアウアー Saff-gIpp)
2021/10/01(金) 17:55:16.70ID:fQjrPzOfa クラスを使うメリットってなに?
240デフォルトの名無しさん (ワッチョイ ff42-Q9Gn)
2021/10/01(金) 19:26:10.62ID:aPfKzK/z0 見た目が美しい
241デフォルトの名無しさん (ワッチョイ cf68-2jfQ)
2021/10/01(金) 19:29:13.73ID:AYkrwA2S0 自己満足
242デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
2021/10/01(金) 19:45:19.68ID:3/37uweO0243デフォルトの名無しさん (ワッチョイ 8301-8myK)
2021/10/01(金) 19:47:27.08ID:4jCtmjal0 >>239
色々あるが、VBAのクラス機能はゴミなのでマジで自己満が多いと思う
解説サイトで玄人の技・隠し機能みたいなノリで紹介されてるので、使えるとプロっぽく見える。
@イベントやデフォルトメンバーみたいなオブジェクトモジュール専用の機能が使える
イベントをまとめたいとかで、仕方なしに、これ目的で使ってる人が多いと思う
A変数に値を入れて、その変数を色んな関数の引数にするっていう事が多々あるけど、
そういう「変数と関数」が常にペアになっているなら纏めた方が分かりやすい
B標準モジュールではモジュールレベルで宣言した変数は実行中保存される。
なので、ある関数でモジュールレベルの変数に値を保存して、別の関数で再利用みたいな使い方が出来る。
でも標準モジュールだと当然その変数に保存できる値は一つなので使い勝手が悪い。
クラスモジュールならインスタンスごとに別の値を保存できる
色々あるが、VBAのクラス機能はゴミなのでマジで自己満が多いと思う
解説サイトで玄人の技・隠し機能みたいなノリで紹介されてるので、使えるとプロっぽく見える。
@イベントやデフォルトメンバーみたいなオブジェクトモジュール専用の機能が使える
イベントをまとめたいとかで、仕方なしに、これ目的で使ってる人が多いと思う
A変数に値を入れて、その変数を色んな関数の引数にするっていう事が多々あるけど、
そういう「変数と関数」が常にペアになっているなら纏めた方が分かりやすい
B標準モジュールではモジュールレベルで宣言した変数は実行中保存される。
なので、ある関数でモジュールレベルの変数に値を保存して、別の関数で再利用みたいな使い方が出来る。
でも標準モジュールだと当然その変数に保存できる値は一つなので使い勝手が悪い。
クラスモジュールならインスタンスごとに別の値を保存できる
244デフォルトの名無しさん (ワッチョイ 8301-8myK)
2021/10/01(金) 19:51:30.36ID:4jCtmjal0 この手の話題には「お前らは使いこなしてないからメリットを把握できてないが、俺は使いこなせてる」おじさんが来る
245デフォルトの名無しさん (ワッチョイ f35f-1D0T)
2021/10/01(金) 19:59:58.89ID:jrcl2rEY0 処理高速化するクラスくらいは単純だし使いまわせるし使ってもいいんじゃない
246デフォルトの名無しさん (ワッチョイ f35f-ZUrU)
2021/10/01(金) 20:12:23.33ID:HK8CLsAI0 ただ単にすっきりして可読性がよい
クラスにしてると他人のコード化したときに何をしてるかもう一度把握するのが容易
自分でメソッドやプロパティを作るとファイルシステムオブジェクトやコレクションを扱い易くなる
クラスにしてると他人のコード化したときに何をしてるかもう一度把握するのが容易
自分でメソッドやプロパティを作るとファイルシステムオブジェクトやコレクションを扱い易くなる
247デフォルトの名無しさん (ワッチョイ 8301-8myK)
2021/10/01(金) 20:33:12.85ID:4jCtmjal0 JSとかと違ってモジュール内に構文で記述できない(単体のモジュールファイルとしてしか書けない)から、
クラスモジュールを書くこと自体が億劫に感じて余り印象よくないわ
プロジェクト内だとどこからでも呼び出せるから、どこでどう使われてるのかサッパリだし
イベント機能とか状態保存を有効に使いたい、コレクションを自作したい、
みたいな特別な理由がない限り使わない方がいいんじゃないかなぁと思ってる
クラスモジュールを書くこと自体が億劫に感じて余り印象よくないわ
プロジェクト内だとどこからでも呼び出せるから、どこでどう使われてるのかサッパリだし
イベント機能とか状態保存を有効に使いたい、コレクションを自作したい、
みたいな特別な理由がない限り使わない方がいいんじゃないかなぁと思ってる
248デフォルトの名無しさん (ドコグロ MMa7-E/uf)
2021/10/01(金) 20:46:27.80ID:g1N/sLwpM 継承までは望まないとしてもせめてInitializeに引数を持てるようにして欲しかった
249デフォルトの名無しさん (ワッチョイ 8301-8myK)
2021/10/01(金) 20:53:23.76ID:4jCtmjal0 >>248
Initializeはコンストラクタじゃなくてイベントだから、
仮に引数があってもオブジェクトモジュール内じゃないと使えない上に、
インスタンスごとにイベントハンドラ用のモジュールレベル変数が必要になって面倒だと思う
Initializeはコンストラクタじゃなくてイベントだから、
仮に引数があってもオブジェクトモジュール内じゃないと使えない上に、
インスタンスごとにイベントハンドラ用のモジュールレベル変数が必要になって面倒だと思う
250デフォルトの名無しさん (ドコグロ MMa7-E/uf)
2021/10/01(金) 21:49:30.27ID:j+Pc2S4XM イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w
251デフォルトの名無しさん (ワッチョイ 8301-8myK)
2021/10/01(金) 22:01:08.86ID:4jCtmjal0252デフォルトの名無しさん (ドコグロ MMa7-E/uf)
2021/10/01(金) 22:07:37.29ID:CXdVtwXkM253デフォルトの名無しさん (ワッチョイ cfda-2jfQ)
2021/10/01(金) 22:11:26.60ID:CmFZe7Ct0 質問者の環境や能力を無視すんなよ
254デフォルトの名無しさん (ワッチョイ 8301-8myK)
2021/10/01(金) 22:24:35.99ID:4jCtmjal0 >>252
何をどう解釈したのか言ってくれれば対応できるけど、最早返答が意味不明過ぎるんだわ
何に対して「イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w」と疑問が沸いたのか説明して?
何をどう解釈したのか言ってくれれば対応できるけど、最早返答が意味不明過ぎるんだわ
何に対して「イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w」と疑問が沸いたのか説明して?
255デフォルトの名無しさん (ワッチョイ 8301-8myK)
2021/10/01(金) 22:34:31.13ID:4jCtmjal0 >>252
あと、VBAのクラスに「引数が付いたコンストラクタが欲しいな」っていう希望から
「Initializeに引数を持てるようにして欲しかった」っていう要望が出たのは明白だろう
で、イベントに引数を渡すのは面倒だよねって話をしたら「コンストラクタにすればいい」ってのもよくわからん。
だったらイベント関係なしに、初めから使いやすいコンストラクタ相当の言語機能が定義されてた方がいいだろう
あと、VBAのクラスに「引数が付いたコンストラクタが欲しいな」っていう希望から
「Initializeに引数を持てるようにして欲しかった」っていう要望が出たのは明白だろう
で、イベントに引数を渡すのは面倒だよねって話をしたら「コンストラクタにすればいい」ってのもよくわからん。
だったらイベント関係なしに、初めから使いやすいコンストラクタ相当の言語機能が定義されてた方がいいだろう
256デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
2021/10/01(金) 22:55:44.73ID:f1R1MoFX0 一般のObject指向言語で言うところの継承が使えないとか色々あるから普通にデザインパターンを考慮して作ろうとするとそこそこ制限受けるよね。
例えば継承が使えないからテンプレートメソッドパターンが使えないとか、
VB.Netで言うSharedが使えないからキチンとシングルトンパターン使おうとすると結構厄介だったりとか。
インターフェースが使えるから継承の代わりにストラテジーパターンでも使って組もうとか考えても限界あるし。
あ?コンストラクタに引数?
そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
他のObject指向言語やってる人って結構インターフェースの概念を疎かにしたりするしね。
例えば継承が使えないからテンプレートメソッドパターンが使えないとか、
VB.Netで言うSharedが使えないからキチンとシングルトンパターン使おうとすると結構厄介だったりとか。
インターフェースが使えるから継承の代わりにストラテジーパターンでも使って組もうとか考えても限界あるし。
あ?コンストラクタに引数?
そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
他のObject指向言語やってる人って結構インターフェースの概念を疎かにしたりするしね。
257デフォルトの名無しさん (ワッチョイ b32f-/JM3)
2021/10/02(土) 02:59:35.03ID:xagjL2JO0 イベントに引数渡す(というか受け取る)のは別に面倒でもなんでないから
コンストラクタの引数をInitializeイベントに渡せたらまあそれもいいんだが
VBAだとInitializeイベントがオーバーロードできないからなぁ
まあもともとのVBがオブジェクト指向でもなんでもなかったとこからスタートしてるからな
俺はVBAのクラスは自作イベント使いたいときに使うものと思ってる
コンストラクタの引数をInitializeイベントに渡せたらまあそれもいいんだが
VBAだとInitializeイベントがオーバーロードできないからなぁ
まあもともとのVBがオブジェクト指向でもなんでもなかったとこからスタートしてるからな
俺はVBAのクラスは自作イベント使いたいときに使うものと思ってる
258デフォルトの名無しさん (ドコグロ MMa7-E/uf)
2021/10/02(土) 06:05:15.61ID:g1EUYVpxM259デフォルトの名無しさん (ドコグロ MMa7-E/uf)
2021/10/02(土) 06:08:02.24ID:g1EUYVpxM >>256
> あ?コンストラクタに引数?
> そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
> まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
そういうのは頭使うとは言わない
単に面倒(かつバグの元)なだけ
無い物ねだりすんなと言うならわかるけど
> あ?コンストラクタに引数?
> そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
> まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
そういうのは頭使うとは言わない
単に面倒(かつバグの元)なだけ
無い物ねだりすんなと言うならわかるけど
260デフォルトの名無しさん (ワッチョイ b3e6-SE+q)
2021/10/02(土) 07:21:09.62ID:f83gGEH/0 VB7を待て!
261デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
2021/10/02(土) 07:44:35.99ID:PmOXqFk20262デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
2021/10/02(土) 07:49:32.43ID:i6pQYLUQ0 それ言い出すとどんな言語でも「だけ」になるぞ
263デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
2021/10/02(土) 07:52:52.17ID:PmOXqFk20 それにポリモーフィズムを理解している奴ならむしろバグやUTケースを減らせるコードが書ける。
でなければObject指向なんてここまで浸透しなかっただろうよ。
でなければObject指向なんてここまで浸透しなかっただろうよ。
264デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
2021/10/02(土) 07:53:44.67ID:PmOXqFk20 >>262
例えば?
例えば?
265デフォルトの名無しさん (ドコグロ MMa7-E/uf)
2021/10/02(土) 08:50:27.63ID:7sXji/t3M むしろ>>263の方に例えば?って言いたいわw
266デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
2021/10/02(土) 09:59:20.90ID:PmOXqFk20267デフォルトの名無しさん (ドコグロ MMa7-E/uf)
2021/10/02(土) 10:26:50.08ID:SSNRs28sM268デフォルトの名無しさん (ワッチョイ cf10-P/uO)
2021/10/02(土) 10:45:25.61ID:l9bGJwl90269デフォルトの名無しさん (ドコグロ MMa7-E/uf)
2021/10/02(土) 11:55:15.97ID:SSNRs28sM 勉強?
からかわれてることぐらいは理解した方がいいぞw
からかわれてることぐらいは理解した方がいいぞw
270デフォルトの名無しさん (ワッチョイ d3da-4VCj)
2021/10/02(土) 11:56:22.57ID:h3OHY9Ln0 まあまあ、通りがかりの者だけど、お前ら仲良くやれや
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- コウメ太夫のネタ考えたから評価してくれ
- トランプ、G7に代わるcore 5を発表 [805596214]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
- 高市ってわざと日本を壊そうとしているスパイ的な役割なんじゃないか? [677076729]
