!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 質問スレ Part72
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (スププ Sdaa-x2SP)
2021/07/18(日) 08:42:15.37ID:KskL7bEXd471デフォルトの名無しさん (アウアウウー Sa55-FoHg)
2021/08/12(木) 19:43:55.65ID:Fj2kkZVUa472デフォルトの名無しさん (ワッチョイ 9b68-uW5m)
2021/08/12(木) 23:17:39.27ID:BTMS1DN70 >>466
いつもの流れだから気にすんな
いつもの流れだから気にすんな
473デフォルトの名無しさん (ワッチョイ 6eda-oCel)
2021/08/13(金) 02:15:07.67ID:fQVKfGt/0 >>466
まだ終わってない
まだ終わってない
474デフォルトの名無しさん (ワンミングク MM92-4yzW)
2021/08/13(金) 03:37:00.81ID:NVit/nDVM >>466
こういう人ってたかがマクロを少し作れるだけで自分が会社を経営してると思い込む馬鹿ばっかだよ
こういう人ってたかがマクロを少し作れるだけで自分が会社を経営してると思い込む馬鹿ばっかだよ
475デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/13(金) 09:23:59.80ID:Dh6ZDsQC0 すみません
VBA初心者です
下記プログラムはB1とB2に任意の数値を入れると
A5〜A100に数値から数値の間の数字が打ちあがります
一度入力したら2回目はA5からA100の数値を手動で削除
しなければなりません
B1に数値を新たに入力したら自動でクリアされれば
手動で削除しなくていいのですがコードが書けないで困ってます
どなたか詳しい方いましたらご教授ください
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address <> "$B$2" Then Exit Sub
If Range("B1").Value = "" Then
Exit Sub
End If
Range("A5:A100").Clear
Dim cnt As Long
Dim i As Long, j As Long
j = 0
cnt = Target.Value - Target.Offset(-1).Value
For i = 5 To cnt + 5
Cells(i, 1) = Target.Offset(-1).Value + j
Cells(i, 1).NumberFormatLocal = "@"
j = j + 1
Next i
End Sub
VBA初心者です
下記プログラムはB1とB2に任意の数値を入れると
A5〜A100に数値から数値の間の数字が打ちあがります
一度入力したら2回目はA5からA100の数値を手動で削除
しなければなりません
B1に数値を新たに入力したら自動でクリアされれば
手動で削除しなくていいのですがコードが書けないで困ってます
どなたか詳しい方いましたらご教授ください
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address <> "$B$2" Then Exit Sub
If Range("B1").Value = "" Then
Exit Sub
End If
Range("A5:A100").Clear
Dim cnt As Long
Dim i As Long, j As Long
j = 0
cnt = Target.Value - Target.Offset(-1).Value
For i = 5 To cnt + 5
Cells(i, 1) = Target.Offset(-1).Value + j
Cells(i, 1).NumberFormatLocal = "@"
j = j + 1
Next i
End Sub
476デフォルトの名無しさん (オイコラミネオ MM49-AL+r)
2021/08/13(金) 09:29:56.69ID:7J82GjQPM >>474
噂の同僚もこんなこと言ってそうだな
噂の同僚もこんなこと言ってそうだな
477デフォルトの名無しさん (ワッチョイ 9901-ic7f)
2021/08/13(金) 09:40:28.79ID:IVydqk9y0 VBAで数値計算をやらないといけないから、VBAの仕様を一通り学ぼうと思って書籍で勉強しているんだけど、
VBAで数値計算する意味がわからんわ
VBAで数値計算するメリットってファイルの入出力くらいしかないだろ・・・
VBAで数値計算する意味がわからんわ
VBAで数値計算するメリットってファイルの入出力くらいしかないだろ・・・
478デフォルトの名無しさん (ワッチョイ 7168-NTPF)
2021/08/13(金) 09:57:08.98ID:lG5axGIx0479デフォルトの名無しさん (オイコラミネオ MM49-AL+r)
2021/08/13(金) 10:08:41.85ID:7J82GjQPM >>477
逆に少し複雑になったら
並べ替えやvlookup用に変な数字が所狭しと並んだり
式もシートもぐちゃぐちゃになったり
行を増やすごとに式をいちいちコピペしないといけなかったり式のコピペ漏れの危険もある関数でやるメリットのほうがよくわからん
関数使っても問題ないのはマジで足し算掛け算レベルの簡単なものだけだろ
逆に少し複雑になったら
並べ替えやvlookup用に変な数字が所狭しと並んだり
式もシートもぐちゃぐちゃになったり
行を増やすごとに式をいちいちコピペしないといけなかったり式のコピペ漏れの危険もある関数でやるメリットのほうがよくわからん
関数使っても問題ないのはマジで足し算掛け算レベルの簡単なものだけだろ
480デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/13(金) 10:09:11.78ID:zvWaH7NU0 >>475
b1かb2以外で終了、に変更
Excel入ってないPCだから試してないけど、多分動くと思う
If Target.Address <> "$B$2" Then Exit Sub
↓
If not(Target.Address = "$B$2" or Target.Address = "$B$1") Then Exit Sub
b1かb2以外で終了、に変更
Excel入ってないPCだから試してないけど、多分動くと思う
If Target.Address <> "$B$2" Then Exit Sub
↓
If not(Target.Address = "$B$2" or Target.Address = "$B$1") Then Exit Sub
481デフォルトの名無しさん (ブーイモ MM6d-H+bG)
2021/08/13(金) 10:14:40.50ID:/ejQKQyrM482デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/13(金) 10:23:05.89ID:zvWaH7NU0483デフォルトの名無しさん (アウアウウー Saa5-/KFf)
2021/08/13(金) 10:37:15.01ID:5J5GXzoka テーブル機能は関数、VBAともに相性いいからとりあえずテーブルにするところから始めればいいんじゃないかな
484デフォルトの名無しさん (アウアウウー Saa5-++7W)
2021/08/13(金) 11:50:40.69ID:c6dMXYo0a >>475
判定をなおしてみました。こんな感じはどうでしょう。
If Target.Address = "$B$1" Then
Range("A5:A100").Clear
Exit Sub
ElseIf Target.Address = "$B$2" Then
If Range("B1").Value = "" Then
Exit Sub
End If
Else
Exit Sub
End If
判定をなおしてみました。こんな感じはどうでしょう。
If Target.Address = "$B$1" Then
Range("A5:A100").Clear
Exit Sub
ElseIf Target.Address = "$B$2" Then
If Range("B1").Value = "" Then
Exit Sub
End If
Else
Exit Sub
End If
485デフォルトの名無しさん (ワッチョイ 9901-2/6I)
2021/08/13(金) 14:43:20.07ID:MQNa+Oeo0 >>475
「B1が変更」かつ「B2が入力済み」の場合にも処理されるようにするのはどうでしょうか。
後、B1B2が数値である保証がないのも気になりました。
冒頭(Early Returnの部分)を
If Target.Address <> "$B$2" and Target.Address <> "$B$1" Then Exit Sub
If (VarType(Range("B1").Value) <> vbDouble) Then Exit Sub
If (VarType(Range("B2").Value) <> vbDouble) Then Exit Sub
に修正し、
Target.Value - Target.Offset(-1).Value
等の部分を具体的にRange("B1")の様にしてみて下さい。
「B1が変更」かつ「B2が入力済み」の場合にも処理されるようにするのはどうでしょうか。
後、B1B2が数値である保証がないのも気になりました。
冒頭(Early Returnの部分)を
If Target.Address <> "$B$2" and Target.Address <> "$B$1" Then Exit Sub
If (VarType(Range("B1").Value) <> vbDouble) Then Exit Sub
If (VarType(Range("B2").Value) <> vbDouble) Then Exit Sub
に修正し、
Target.Value - Target.Offset(-1).Value
等の部分を具体的にRange("B1")の様にしてみて下さい。
486デフォルトの名無しさん (ワッチョイ c2da-oCel)
2021/08/13(金) 16:54:07.44ID:HPpKMPwN0 いまだにテーブル機能を表のレイアウトの見栄えよくする機能だと思っている人いるんだなマジで。
興味ないとそんなもんだよね
興味ないとそんなもんだよね
487デフォルトの名無しさん (アウアウウー Saa5-/KFf)
2021/08/13(金) 17:27:51.79ID:Ko30HHoCa Vlookupなんてテーブルありきの仕様(範囲可変対応、速度、列指定等…)だし、
VBA使う時はForで範囲の中の値をループ処理するのはテーブル使うのが1番完結かつ読み手に伝わりやすい(と思う)
興味ない人は触れることもないんだろうなぁと思うと寂しいね
VBA使う時はForで範囲の中の値をループ処理するのはテーブル使うのが1番完結かつ読み手に伝わりやすい(と思う)
興味ない人は触れることもないんだろうなぁと思うと寂しいね
488デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/13(金) 18:51:34.24ID:Dh6ZDsQC0 VBA達人の皆さんありがとうございます
早速試してみます
皆さんはどのように勉強されたのですか?
VBA2年目ですがまだまだ初心者から脱却できません
早速試してみます
皆さんはどのように勉強されたのですか?
VBA2年目ですがまだまだ初心者から脱却できません
489デフォルトの名無しさん (ワッチョイ c2da-oCel)
2021/08/13(金) 18:51:53.98ID:HPpKMPwN0 まだ良いよ
見栄えよくすると思い込んでいて、何でもかんでもテーブルに変換する同僚がいるから
出力でそれやられると見辛い
見栄えよくすると思い込んでいて、何でもかんでもテーブルに変換する同僚がいるから
出力でそれやられると見辛い
490デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/13(金) 19:17:27.00ID:zvWaH7NU0491デフォルトの名無しさん (ワッチョイ 8101-AL+r)
2021/08/13(金) 20:37:12.04ID:fD7XP3Na0 変数を日本語にすると頭に入りやすい
492デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/13(金) 20:55:03.16ID:Dh6ZDsQC0493デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/13(金) 20:57:12.23ID:Dh6ZDsQC0494デフォルトの名無しさん (ワッチョイ 9901-ic7f)
2021/08/13(金) 21:57:30.74ID:IVydqk9y0 >>479
やっぱりどう考えてもVBAで数値計算って無理がありそうですよね
数値計算自体も偏微分方程式の解を求めたり、モンテカルロで期待値を求めたりするので、結構重いです・・・
学生なんで確信を持って言えないのですが、恐らく就職希望している業界がVBAとc++がメインなのでVBAで数値計算をできるようになっておく必要があると思います。
とりあえずまだ時間があるので、一度自分でVBAで書いてみてからデメリットを実感して見ようかと思います
やっぱりどう考えてもVBAで数値計算って無理がありそうですよね
数値計算自体も偏微分方程式の解を求めたり、モンテカルロで期待値を求めたりするので、結構重いです・・・
学生なんで確信を持って言えないのですが、恐らく就職希望している業界がVBAとc++がメインなのでVBAで数値計算をできるようになっておく必要があると思います。
とりあえずまだ時間があるので、一度自分でVBAで書いてみてからデメリットを実感して見ようかと思います
495デフォルトの名無しさん (ワッチョイ 9901-ic7f)
2021/08/13(金) 21:59:38.88ID:IVydqk9y0496デフォルトの名無しさん (ワッチョイ 71e4-gilQ)
2021/08/13(金) 22:15:24.05ID:al2VsHhL0 その分野には詳しくないんだが、不向きなのに何故VBAを数値計算に使うんだ?
エクセルならVBA使わずとも関数とかソルバーで出来るんじゃない?
エクセルならVBA使わずとも関数とかソルバーで出来るんじゃない?
497デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/13(金) 22:24:34.19ID:zvWaH7NU0498デフォルトの名無しさん (オイコラミネオ MMd6-Lo6P)
2021/08/13(金) 23:20:47.22ID:WIfN9845M 賑わってるね
499デフォルトの名無しさん (ワッチョイ 8101-AL+r)
2021/08/14(土) 00:11:33.82ID:p2FjIi+P0 >>497
あっ…なるほど(察し
あっ…なるほど(察し
500デフォルトの名無しさん (ワッチョイ 8232-/m/d)
2021/08/14(土) 00:32:25.73ID:8xoU1q0D0 夏季休暇に突入したぜウェーイ!
501デフォルトの名無しさん (アウアウウー Saa5-5/Wf)
2021/08/14(土) 03:50:50.70ID:2+Zp3qYIa c++とvbaを両方とも使うのありますよ
ターボファンの3次元ブレード図面の自動生成をする為に
autoCAD用APIをc++使ってdirectXのシェーダーでやり
流体計算はcudaの並列計算する一方で
ユーザーインターフェースはExcelVBAで寸法入力させるんですよ
ターボファンの3次元ブレード図面の自動生成をする為に
autoCAD用APIをc++使ってdirectXのシェーダーでやり
流体計算はcudaの並列計算する一方で
ユーザーインターフェースはExcelVBAで寸法入力させるんですよ
502デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/14(土) 07:34:08.52ID:olTKpvXL0 何度も申し訳ありません
期間の日付をA5〜A100に自動で打ちあがるようにしたいのですが
例えばB1に整数3が入りB2に整数5が入った場合
A5〜A7に3、4、5
と自動で打ちあがるようにしたいです
B2に整数以外が文字などが入る場合は
例えばB1に3B2に英字のKが入った場合
A5に3A6にK
が打ち上がるようにしたいのですが
下記コードだと2回目以降はB1の値が変わっただけでは発火しないので
B2も変更しなければなりません
B1の値が変更されたら即発火させるにはどのようなコードで記述したらいいのでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address <> "$B$2" And Target.Address <> "$B$1" Then Exit Sub
Range("A5:A100").Clear
Dim cnt As Long
Dim i As Long, j As Long
j = 0
cnt = Target.Value - Target.Offset(-1).Value
For i = 5 To cnt + 5
Cells(i, 1) = Target.Offset(-1).Value + j
Cells(i, 1).NumberFormatLocal = "@"
j = j + 1
Next i
End Sub
期間の日付をA5〜A100に自動で打ちあがるようにしたいのですが
例えばB1に整数3が入りB2に整数5が入った場合
A5〜A7に3、4、5
と自動で打ちあがるようにしたいです
B2に整数以外が文字などが入る場合は
例えばB1に3B2に英字のKが入った場合
A5に3A6にK
が打ち上がるようにしたいのですが
下記コードだと2回目以降はB1の値が変わっただけでは発火しないので
B2も変更しなければなりません
B1の値が変更されたら即発火させるにはどのようなコードで記述したらいいのでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address <> "$B$2" And Target.Address <> "$B$1" Then Exit Sub
Range("A5:A100").Clear
Dim cnt As Long
Dim i As Long, j As Long
j = 0
cnt = Target.Value - Target.Offset(-1).Value
For i = 5 To cnt + 5
Cells(i, 1) = Target.Offset(-1).Value + j
Cells(i, 1).NumberFormatLocal = "@"
j = j + 1
Next i
End Sub
503デフォルトの名無しさん (ブーイモ MMb6-usf7)
2021/08/14(土) 07:41:00.78ID:X5b04eQGM 打ちあがるって何?
504デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/14(土) 07:49:40.96ID:WRC7pvXs0505デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/14(土) 08:01:31.03ID:olTKpvXL0506デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/14(土) 08:04:36.53ID:olTKpvXL0507デフォルトの名無しさん (ブーイモ MM62-GUjw)
2021/08/14(土) 08:16:43.15ID:FeW4uPBDM IsNumericでB2を判定してTrueならFor文を走らせて、FalseならB2をA6へ
508デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/14(土) 08:16:49.28ID:WRC7pvXs0 >>502
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo err
'B1B2じゃなければ終了
If Intersect(Target, Range("B1:b2")) Is Nothing Then Exit Sub
'とりあえずクリア
Range("A5:A100").Clear
'メイン。整数じゃなければerrに飛んでコピーして終わり。trycacheみたいな事がしたかった
最初 = Cells(1, 2)
最後 = Cells(2, 2)
'
If (Int(最初) = 最初 And Int(最後) = 最後) Then
行 = 5
For i = 最初 To 最後
Cells(行, 1) = i
行 = 行 + 1
Next
Exit Sub
End If
'整数以外
err:
Range("a5:a6").Value = Range("B1:b2").Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo err
'B1B2じゃなければ終了
If Intersect(Target, Range("B1:b2")) Is Nothing Then Exit Sub
'とりあえずクリア
Range("A5:A100").Clear
'メイン。整数じゃなければerrに飛んでコピーして終わり。trycacheみたいな事がしたかった
最初 = Cells(1, 2)
最後 = Cells(2, 2)
'
If (Int(最初) = 最初 And Int(最後) = 最後) Then
行 = 5
For i = 最初 To 最後
Cells(行, 1) = i
行 = 行 + 1
Next
Exit Sub
End If
'整数以外
err:
Range("a5:a6").Value = Range("B1:b2").Value
End Sub
509デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/14(土) 08:17:31.92ID:WRC7pvXs0510デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/14(土) 08:32:21.96ID:olTKpvXL0511デフォルトの名無しさん (ブーイモ MM62-GUjw)
2021/08/14(土) 08:34:31.28ID:FeW4uPBDM あぁそうか整数の時だけなのか
でもOnErrorResumeNextはバグを見逃しやすくなるから個人的にはあんまり使いたくねぇなぁ
lsNumenic(B2)の後にB2=CLng(B2)で整数判定かけるのってどう?……見辛くなるか
でもOnErrorResumeNextはバグを見逃しやすくなるから個人的にはあんまり使いたくねぇなぁ
lsNumenic(B2)の後にB2=CLng(B2)で整数判定かけるのってどう?……見辛くなるか
512デフォルトの名無しさん (アウアウウー Saa5-++7W)
2021/08/14(土) 09:09:38.05ID:LMRL1zmta >>502がそもそも何で質問の様な動作になるかがわかってないとこれからも簡単なことでつまずくと思うよ
当初と違って最初のif分に「Target.Address <> "$B$1"」が含まれたことでB1でも下のロジックが動くようになったけど
「cnt = Target.Value - Target.Offset(-1).Value」これがB1がTargetだと右のOffsetが存在しないから以降のコードが正しく動作しない状態になってる
B2→Target.ValueはB2、Target.Offset(-1)はB1
B1→Target.ValueはB1、Target.Offset(-1)は存在しないセルなのでエラー
ここをB1でもB2でも正しくセルの値を参照できるようにすればいいのでは
ちなみに「On Error Resume Next」のせいでエラーになっているのを無視して動作するようになってるので外したほうがいいのでは
当初と違って最初のif分に「Target.Address <> "$B$1"」が含まれたことでB1でも下のロジックが動くようになったけど
「cnt = Target.Value - Target.Offset(-1).Value」これがB1がTargetだと右のOffsetが存在しないから以降のコードが正しく動作しない状態になってる
B2→Target.ValueはB2、Target.Offset(-1)はB1
B1→Target.ValueはB1、Target.Offset(-1)は存在しないセルなのでエラー
ここをB1でもB2でも正しくセルの値を参照できるようにすればいいのでは
ちなみに「On Error Resume Next」のせいでエラーになっているのを無視して動作するようになってるので外したほうがいいのでは
513デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/14(土) 09:17:38.32ID:WRC7pvXs0514デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/14(土) 09:25:22.77ID:olTKpvXL0 >>512
> >>502がそもそも何で質問の様な動作になるかがわかってないとこれからも簡単なことでつまずくと思うよ
> 当初と違って最初のif分に「Target.Address <> "$B$1"」が含まれたことでB1でも下のロジックが動くようになったけど
> 「cnt = Target.Value - Target.Offset(-1).Value」これがB1がTargetだと右のOffsetが存在しないから以降のコードが正しく動作しない状態になってる
> B2→Target.ValueはB2、Target.Offset(-1)はB1
> B1→Target.ValueはB1、Target.Offset(-1)は存在しないセルなのでエラー
> ここをB1でもB2でも正しくセルの値を参照できるようにすればいいのでは
> ちなみに「On Error Resume Next」のせいでエラーになっているのを無視して動作するようになってるので外したほうがいいのでは
ネットで拾ったコードにOn Error Resume Nextを
加えたりして動くように自分なりにやってみたのですが
cnt = Target.Value - Target.Offset(-1).Value
の意味が理解できなくて・・・
少々自分にはレベルの高いコードでした
仕事でどうしてもエクセル使わないといけなかったので無理しましたw
ご教授ありがとうございます!
> >>502がそもそも何で質問の様な動作になるかがわかってないとこれからも簡単なことでつまずくと思うよ
> 当初と違って最初のif分に「Target.Address <> "$B$1"」が含まれたことでB1でも下のロジックが動くようになったけど
> 「cnt = Target.Value - Target.Offset(-1).Value」これがB1がTargetだと右のOffsetが存在しないから以降のコードが正しく動作しない状態になってる
> B2→Target.ValueはB2、Target.Offset(-1)はB1
> B1→Target.ValueはB1、Target.Offset(-1)は存在しないセルなのでエラー
> ここをB1でもB2でも正しくセルの値を参照できるようにすればいいのでは
> ちなみに「On Error Resume Next」のせいでエラーになっているのを無視して動作するようになってるので外したほうがいいのでは
ネットで拾ったコードにOn Error Resume Nextを
加えたりして動くように自分なりにやってみたのですが
cnt = Target.Value - Target.Offset(-1).Value
の意味が理解できなくて・・・
少々自分にはレベルの高いコードでした
仕事でどうしてもエクセル使わないといけなかったので無理しましたw
ご教授ありがとうございます!
515デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/14(土) 09:28:14.25ID:olTKpvXL0516デフォルトの名無しさん (ワッチョイ c2da-oCel)
2021/08/14(土) 10:58:30.72ID:UIvxBUgE0 Excelの関数とか覚える必要ないでしょ
全部マクロでやれば済むはずだし。
全部マクロで処理している人が職場にいる。
全部マクロでやれば済むはずだし。
全部マクロで処理している人が職場にいる。
517デフォルトの名無しさん (ワッチョイ 7168-NTPF)
2021/08/14(土) 11:02:58.83ID:WZYuRp6L0 適材適所
518デフォルトの名無しさん (ワッチョイ 9901-ic7f)
2021/08/14(土) 11:11:37.37ID:Wd8wuOU/0 >>496
使う理由は確かにわからないんですよね・・・
ただ、日本語以外の本でもその業界の数値計算のコード例がC++かVBAかMATLABなので恐らく業界のデファクトスタンダード
になっているんだと思います。
VBA以外にも使えそうなエクセルの機能があるなら使っていこうかと思います
使う理由は確かにわからないんですよね・・・
ただ、日本語以外の本でもその業界の数値計算のコード例がC++かVBAかMATLABなので恐らく業界のデファクトスタンダード
になっているんだと思います。
VBA以外にも使えそうなエクセルの機能があるなら使っていこうかと思います
519デフォルトの名無しさん (ワッチョイ 9901-ic7f)
2021/08/14(土) 11:13:11.03ID:Wd8wuOU/0520デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/14(土) 11:22:28.35ID:WRC7pvXs0521デフォルトの名無しさん (アウアウウー Saa5-oCel)
2021/08/14(土) 11:37:23.70ID:WNZYUSqEa たまになのによくみる?
522デフォルトの名無しさん (エムゾネ FF62-BgPC)
2021/08/14(土) 12:03:40.37ID:MjnqNUAdF >>515
5ちゃんを観るのを止めると綺麗なコード描けるようになる
5ちゃんを観るのを止めると綺麗なコード描けるようになる
523デフォルトの名無しさん (ブーイモ MMb6-aBRF)
2021/08/14(土) 12:21:33.89ID:r4eiaXelM524デフォルトの名無しさん (ワッチョイ 3d28-/KFf)
2021/08/14(土) 12:31:49.92ID:egxXCzK30 if,and,orと変数の使い方を覚える
Functionの使い方を覚える(Byval,ByRef)
Range(”A2”)みたいな書き方から、Worksheet.Cells(2,1)の様な書き方に変える
配列、Dictionary,Collectionの使い方を覚える
ユーザーフォームを作れるようになる
(クラスの使い方を覚える)
こんな流れで順々にやれることを増やしていくといいよ
Functionの使い方を覚える(Byval,ByRef)
Range(”A2”)みたいな書き方から、Worksheet.Cells(2,1)の様な書き方に変える
配列、Dictionary,Collectionの使い方を覚える
ユーザーフォームを作れるようになる
(クラスの使い方を覚える)
こんな流れで順々にやれることを増やしていくといいよ
525デフォルトの名無しさん (ワッチョイ 7168-NTPF)
2021/08/14(土) 12:35:39.31ID:WZYuRp6L0526デフォルトの名無しさん (ワッチョイ 498e-JtI+)
2021/08/14(土) 16:05:31.07ID:9rufdIX60 ID:olTKpvXL0
いつものあいつ
いつものあいつ
527デフォルトの名無しさん (ブーイモ MM62-GUjw)
2021/08/14(土) 16:13:08.42ID:FeW4uPBDM いつものあいつって言いたいだけの例の人
528デフォルトの名無しさん (ワッチョイ 7168-NTPF)
2021/08/14(土) 16:13:36.00ID:WZYuRp6L0 いつものあいつに粘着してるやつ
529デフォルトの名無しさん (ワッチョイ 8101-AL+r)
2021/08/14(土) 16:16:12.93ID:p2FjIi+P0 Rubyの人だっけ
530デフォルトの名無しさん (ワントンキン MM92-4yzW)
2021/08/14(土) 19:17:04.70ID:QQrfTJ+jM またも引っ掛かる間抜けな人達
531デフォルトの名無しさん (ワッチョイ 9901-pBez)
2021/08/14(土) 23:40:30.92ID:0AEpqYcN0 VBAはビジネスソフト板でやれ。
ム板でVBAの話する奴は全員荒らし。
ム板でVBAの話する奴は全員荒らし。
532デフォルトの名無しさん (ワッチョイ 42ad-NTPF)
2021/08/15(日) 01:41:34.07ID:Ab4oMS/u0 ListBoxAに複数行の内容を表示し、その行数をラベルに表示させている。
RemoveItemで行を削除した後、ラベルの表示内容を更新したい。
といった場合に、
RemoveItemの後でラベルの数字を1マイナスする、という手動処理ではなくて、
ListBoxAの内容が変更されたことをトリガーとして行数を再計算する、という自動処理にしたいんですが、
どのイベントプロシージャを使えばいいですか?
RemoveItemで行を削除した後、ラベルの表示内容を更新したい。
といった場合に、
RemoveItemの後でラベルの数字を1マイナスする、という手動処理ではなくて、
ListBoxAの内容が変更されたことをトリガーとして行数を再計算する、という自動処理にしたいんですが、
どのイベントプロシージャを使えばいいですか?
533デフォルトの名無しさん (ワッチョイ 8101-AL+r)
2021/08/15(日) 09:02:47.73ID:Vp1mNkx00 またでたー
534デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/15(日) 10:47:47.12ID:FNsj8xWN0 >>532
無いっぽい
>RemoveItemの後でラベルの数字を1マイナスする
例えばcommandbuttonでRemoveItemしてるなら、
以下のようにするしか
Private Sub CommandButton1_Click()
'removeitemの処理がここに
Debug.Print ListBox1.ListCount
End Sub
無いっぽい
>RemoveItemの後でラベルの数字を1マイナスする
例えばcommandbuttonでRemoveItemしてるなら、
以下のようにするしか
Private Sub CommandButton1_Click()
'removeitemの処理がここに
Debug.Print ListBox1.ListCount
End Sub
535デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/15(日) 10:48:11.05ID:FNsj8xWN0 RemoveItemにevent追加するほうが綺麗だけどねぇ
vbaじゃ無理だねぇ
vbaじゃ無理だねぇ
536デフォルトの名無しさん (ワッチョイ c242-rA07)
2021/08/15(日) 11:06:26.14ID:47f+T2dk0 仮にイベントがあったとしてもremoveitemのあとに再計算の処理を書いたほうがスッキリしていいと思うが
537デフォルトの名無しさん (ワッチョイ 4201-VYeI)
2021/08/15(日) 11:24:14.03ID:U+FsjVqC0 >>536
RemoveItemしてるのが1箇所ならいいかも知れんが複数あったら面倒だろ
RemoveItemしてるのが1箇所ならいいかも知れんが複数あったら面倒だろ
538デフォルトの名無しさん (アウアウウー Saa5-oCel)
2021/08/15(日) 11:44:01.29ID:PuWX92Pra 一ヶ所にまとめればいいだけだし
539デフォルトの名無しさん (ワッチョイ 4201-VYeI)
2021/08/15(日) 11:48:45.57ID:U+FsjVqC0 イベントに書ければ1箇所にまとめる手間もないし1年後に改修した時に1箇所にまとめたのを忘れてRemoveItem単体で使ってバグることもないし…
まあVBAでは夢物語なんだけどね
まあVBAでは夢物語なんだけどね
540532 (ワッチョイ 42ad-NTPF)
2021/08/15(日) 12:12:51.35ID:Ab4oMS/u0 ありがとうございます。
その後、試してみたこととして、
ListBoxのChangeイベントに再計算の処理を書いておき、
RemoveItemの後で.listIndex=0の処理を入れたところ、
一発目のRemoveItem後は、期待どおりChangeイベントが発生してくれましたが、
二発目以降は、.listIndexが0→0と変化なしのせいか、イベントは発生しませんでした。
行数を再計算したい、と書きましたが、
単純に全体の行数であれば、RemoveItemの後で.listCountをラベルに代入するだけの一行で済みますが、
実際は、リストの1カラム目(ID欄として使用)が100未満の場合と100以上の場合で分けてカウントしており、
FOR文で、ID100未満までの間でヒットするIDがあるたびに対象のカウントをインクリメントし、
2つ目のFOR文で、ID100以上について同様の処理を行う、
という風にしようとした時に、これが冗長に思えました。
もし、使えるイベントがあれば、
そのイベントプロシージャの中で、
それぞれのカウンタラベルのうち対象となる方のみマイナスした値に変更する、
という処理を入れるだけでOKになりそう、と考えました。
結論としては、
イベントに頼らず、
指定したIDの行を.RemoveItemする処理のところで、
そのIDが100未満か100以上かで分岐させて、
その分岐の中で、対象となるカウンタをマイナスする、
という処理にしました。
その後、試してみたこととして、
ListBoxのChangeイベントに再計算の処理を書いておき、
RemoveItemの後で.listIndex=0の処理を入れたところ、
一発目のRemoveItem後は、期待どおりChangeイベントが発生してくれましたが、
二発目以降は、.listIndexが0→0と変化なしのせいか、イベントは発生しませんでした。
行数を再計算したい、と書きましたが、
単純に全体の行数であれば、RemoveItemの後で.listCountをラベルに代入するだけの一行で済みますが、
実際は、リストの1カラム目(ID欄として使用)が100未満の場合と100以上の場合で分けてカウントしており、
FOR文で、ID100未満までの間でヒットするIDがあるたびに対象のカウントをインクリメントし、
2つ目のFOR文で、ID100以上について同様の処理を行う、
という風にしようとした時に、これが冗長に思えました。
もし、使えるイベントがあれば、
そのイベントプロシージャの中で、
それぞれのカウンタラベルのうち対象となる方のみマイナスした値に変更する、
という処理を入れるだけでOKになりそう、と考えました。
結論としては、
イベントに頼らず、
指定したIDの行を.RemoveItemする処理のところで、
そのIDが100未満か100以上かで分岐させて、
その分岐の中で、対象となるカウンタをマイナスする、
という処理にしました。
541デフォルトの名無しさん (ワッチョイ 62f0-/m/d)
2021/08/15(日) 14:06:03.01ID:Q1u7LxQ80542デフォルトの名無しさん (アウアウウー Saa5-++7W)
2021/08/15(日) 14:16:20.36ID:044XE2rOa そういうの知っても意味ないから放置でいいのでは
質問されたら答えるだけで無理に関係ない話題でレスを進める必要はないのでは
質問されたら答えるだけで無理に関係ない話題でレスを進める必要はないのでは
543デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/15(日) 14:35:34.20ID:FNsj8xWN0544デフォルトの名無しさん (ワッチョイ 6e68-NTPF)
2021/08/15(日) 15:32:30.69ID:mzIErmSO0545デフォルトの名無しさん (ワッチョイ c242-rA07)
2021/08/15(日) 22:31:41.12ID:47f+T2dk0546デフォルトの名無しさん (ワッチョイ 0668-MFFZ)
2021/08/15(日) 22:49:28.66ID:FNsj8xWN0547デフォルトの名無しさん (ワッチョイ 4201-VYeI)
2021/08/15(日) 23:03:09.52ID:U+FsjVqC0 >>545
> そもそもまとめたことを忘れるようなやつはイベントの存在も忘れてる
だから忘れてもいいって話
> つーかVBAじゃなくても標準でそんなイベント発生する言語はないと思うぞ
C#とかなら標準にはなくても派生して作れるってこと
> そもそもまとめたことを忘れるようなやつはイベントの存在も忘れてる
だから忘れてもいいって話
> つーかVBAじゃなくても標準でそんなイベント発生する言語はないと思うぞ
C#とかなら標準にはなくても派生して作れるってこと
548デフォルトの名無しさん (ワッチョイ 2e10-YTvb)
2021/08/15(日) 23:33:36.15ID:HzefVCWR0 フォームのチェンジイベントをイチイチ回避させないといけないのマジで面倒くさい
フラグ作ってif からのexit subとかマジで面倒くさい
フラグ作ってif からのexit subとかマジで面倒くさい
549デフォルトの名無しさん (ワッチョイ 6eda-NTPF)
2021/08/16(月) 05:14:26.01ID:XafigDS10 EXCEL以外の言語なら簡単にできるとかいう人っていつもの人ですか?
550デフォルトの名無しさん (ワッチョイ 8101-AL+r)
2021/08/16(月) 20:23:33.18ID:pkWTpyDW0 少なくとも一番ムキになってるアレがそうなんでしょうね
551デフォルトの名無しさん (ワッチョイ c2da-oCel)
2021/08/17(火) 02:14:38.57ID:XfCCEtxD0 昔はこのスレまともだったのに、変な荒らしが現れてからおかしくなっただけ
552デフォルトの名無しさん (アウアウウー Saa5-oCel)
2021/08/17(火) 14:49:45.30ID:n4WKWZLba 昔?あ、俺生まれてないや
553デフォルトの名無しさん (ブーイモ MMb6-aBRF)
2021/08/17(火) 15:23:12.86ID:2f/o9RsTM >>552
いつ生まれたの?w
いつ生まれたの?w
554デフォルトの名無しさん (ブーイモ MM6d-usf7)
2021/08/17(火) 20:35:18.63ID:4IURpNomM555デフォルトの名無しさん (ワッチョイ e292-/m/d)
2021/08/19(木) 01:46:41.56ID:GJSA9V5J0 す、巣窟?
556デフォルトの名無しさん (ワッチョイ 468c-nLcX)
2021/08/19(木) 12:48:42.55ID:gPE31PeS0 そ う だ よ
557デフォルトの名無しさん (ワッチョイ ff63-RUy2)
2021/08/20(金) 00:11:44.24ID:YzPl1p2A0 Dim mysubfiles As Files
Dim mysubfile As File
For Each mysubfile In mysubfiles
中略
Next
このループ中で作成したファイルも
このループ内の処理を通したいのですが
どうしたらよいでしょうか。
具体的な状況は以下のとおりです。
・ループ内では拡張子xlsxのファイルを加工したい。
・しかしxlsmで保存されている場合もある。
・ループの最初にxlsmを開いてxlsxとして保存する処理を入れたものの
そのxlsxが加工されない
Dim mysubfile As File
For Each mysubfile In mysubfiles
中略
Next
このループ中で作成したファイルも
このループ内の処理を通したいのですが
どうしたらよいでしょうか。
具体的な状況は以下のとおりです。
・ループ内では拡張子xlsxのファイルを加工したい。
・しかしxlsmで保存されている場合もある。
・ループの最初にxlsmを開いてxlsxとして保存する処理を入れたものの
そのxlsxが加工されない
558デフォルトの名無しさん (ワッチョイ 1f5f-N+XL)
2021/08/20(金) 00:21:12.76ID:EM+6hHZh0 >>557
xlsmがあればフラグをTrueにして、最後までループしたらもう一度その処理をするとか?
それなら「元々xlsmだったもの のみ」の処理はできないが、中略の中身によってはOKでしょう
「元々xlsmだったもの のみ」処理するのであれば、xlsm処理時点でDictionaryにファイル名をAddして、ループ終わった後に再度ループさせ、Dictionaryにあるファイルのみ処理する
になるかな
読みづらくはなると思うけど仕方ない
xlsmがあればフラグをTrueにして、最後までループしたらもう一度その処理をするとか?
それなら「元々xlsmだったもの のみ」の処理はできないが、中略の中身によってはOKでしょう
「元々xlsmだったもの のみ」処理するのであれば、xlsm処理時点でDictionaryにファイル名をAddして、ループ終わった後に再度ループさせ、Dictionaryにあるファイルのみ処理する
になるかな
読みづらくはなると思うけど仕方ない
559デフォルトの名無しさん (ワッチョイ 9f01-AxjU)
2021/08/20(金) 03:30:46.68ID:fkNLvzJY0 >>557
ループ中で新たに作成したxlsxファイルも、
元々xlsxだっとファイルと同じ処理を行いたいって事でいいでしょうか。
編集するファイル用の変数(例えばTargetFile)を新たに用意して、
中略部分は mysubfile ではなく TargetFile を処理するというコードにしておきます。
冒頭にその TargetFile を何に割り当てるかを決定するコードを書きます。
・mysubfileがxlsxである場合は、mysubfileの参照をTargetFileへそのまま代入
・そうでない場合はxlsxとして保存しなおして、保存したxlsxを取得してTargetFileへ代入
条件によって反復子から取得した値がそのまま扱えない場合はこういう書き方をするのが一般的かと思います。
中略部分を関数にして引数に渡す値を変えるといった表現方法でもいいでしょう。
ループ中で新たに作成したxlsxファイルも、
元々xlsxだっとファイルと同じ処理を行いたいって事でいいでしょうか。
編集するファイル用の変数(例えばTargetFile)を新たに用意して、
中略部分は mysubfile ではなく TargetFile を処理するというコードにしておきます。
冒頭にその TargetFile を何に割り当てるかを決定するコードを書きます。
・mysubfileがxlsxである場合は、mysubfileの参照をTargetFileへそのまま代入
・そうでない場合はxlsxとして保存しなおして、保存したxlsxを取得してTargetFileへ代入
条件によって反復子から取得した値がそのまま扱えない場合はこういう書き方をするのが一般的かと思います。
中略部分を関数にして引数に渡す値を変えるといった表現方法でもいいでしょう。
560デフォルトの名無しさん (ワッチョイ 7f01-9KvQ)
2021/08/20(金) 06:44:10.09ID:O2iQQ7aA0561デフォルトの名無しさん (ワッチョイ 9f2f-RUy2)
2021/08/20(金) 07:35:23.32ID:+liSrGPN0 自分で配列なりコレクションなり用意してDoでループ回せよ
562デフォルトの名無しさん (ワッチョイ ff68-RJcP)
2021/08/20(金) 07:43:25.84ID:6SYvdNEC0 ループの中で処理するんじゃなく、サブルーチンにして呼び出す方がいいな
563デフォルトの名無しさん (ワッチョイ 9f2f-RUy2)
2021/08/20(金) 14:52:28.33ID:+liSrGPN0 そのサブルーチンを呼び出すのにどうやってループさせるの?
もしくは
そのサブルーチンのなかでどうやって列挙させるの?
って話だと思うんだが
もしくは
そのサブルーチンのなかでどうやって列挙させるの?
って話だと思うんだが
564デフォルトの名無しさん (ブーイモ MM4f-7Mq8)
2021/08/20(金) 14:57:01.36ID:01P72Y3qM xlsmだったらxlsxにしてそのファイルを引数にして渡す
xlsxだったらそのまま渡す
それだけのこと
xlsxだったらそのまま渡す
それだけのこと
565デフォルトの名無しさん (ワッチョイ 9f01-AxjU)
2021/08/20(金) 15:39:01.41ID:fkNLvzJY0 前々から思ってたんだけど、抽象的に質問書く人多いね
あと謎用語作ったり(この前も「打ちあがる」とか何とか)
テンプレ作った方がいいんじゃないか?
あと謎用語作ったり(この前も「打ちあがる」とか何とか)
テンプレ作った方がいいんじゃないか?
566デフォルトの名無しさん (アウアウウー Sa63-FcIJ)
2021/08/20(金) 15:48:44.06ID:XV1yMITLa 別に適当に質問してくるなら適当に返せばいいでしょ
それなりの回答を求めるならそれなりに質問するのが常識では
それなりの回答を求めるならそれなりに質問するのが常識では
567デフォルトの名無しさん (ワッチョイ 1f5f-H9yk)
2021/08/20(金) 18:27:44.18ID:pH4dbDdN0568デフォルトの名無しさん (ワッチョイ ffb0-+zBM)
2021/08/20(金) 19:51:09.61ID:qaJDzmMG0 質問スレなのに質問しにくい雰囲気を作っていくぅ〜
569デフォルトの名無しさん (ワッチョイ ffda-FcIJ)
2021/08/20(金) 22:28:26.67ID:tsSDUWXI0 問題ない
570デフォルトの名無しさん (ワッチョイ 7f92-Awm0)
2021/08/21(土) 00:15:10.89ID:fb/04mNm0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 【速報】気象庁は津波注意報すべて解除 [蚤の市★]
- 【実況】博衣こよりのえちえち朝こよ🧪
- (´・ω・`)おはよ
- さかまた「過呼吸になった」かなた「耳聞こえない」ござる「声出ない」まつり「ご飯食べれない」
- 【画像】カリカリ女、脱いだらすごい😨 [632966346]
- くそしてかがやけ
- 🪬本日のコンマ占い🧿
