!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part68
https://mevius.5ch.net/test/read.cgi/tech/1598756127/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
Excel VBA 質問スレ Part69
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ 3fad-qZ/b)
2020/12/13(日) 00:22:23.67ID:Fd224klc0957デフォルトの名無しさん (ワッチョイ 1291-seln)
2021/03/17(水) 02:44:52.10ID:LQZUutD10958デフォルトの名無しさん (JP 0H8d-IMun)
2021/03/17(水) 03:45:50.60ID:KXbC8pO1H >>957 なおした
Option Explicit
Sub VBA69_932()
Dim A_number As Long, B_name As String, C_list As Object
Dim last_row As Long, row_loop As Long, search_loop As Long
Set C_list = CreateObject("Scripting.Dictionary")
With ThisWorkbook.ActiveSheet
last_row = .Range("A" & Rows.Count).End(xlUp).Row
For row_loop = 1 To last_row
C_list.RemoveAll
A_number = .Range("A" & row_loop)
For search_loop = 1 To last_row
If .Range("A" & search_loop) = A_number Then
B_name = .Range("B" & search_loop)
If Not C_list.exists(B_name) Then
C_list.Add (B_name), 0
End If
End If
Next
.Range("C" & row_loop) = Join(C_list.keys, "・")
Next
End With
End Sub
Option Explicit
Sub VBA69_932()
Dim A_number As Long, B_name As String, C_list As Object
Dim last_row As Long, row_loop As Long, search_loop As Long
Set C_list = CreateObject("Scripting.Dictionary")
With ThisWorkbook.ActiveSheet
last_row = .Range("A" & Rows.Count).End(xlUp).Row
For row_loop = 1 To last_row
C_list.RemoveAll
A_number = .Range("A" & row_loop)
For search_loop = 1 To last_row
If .Range("A" & search_loop) = A_number Then
B_name = .Range("B" & search_loop)
If Not C_list.exists(B_name) Then
C_list.Add (B_name), 0
End If
End If
Next
.Range("C" & row_loop) = Join(C_list.keys, "・")
Next
End With
End Sub
959デフォルトの名無しさん (ワッチョイ 2e8f-IMun)
2021/03/17(水) 10:07:11.87ID:wJCP0FMq0960デフォルトの名無しさん (ワッチョイ 02bd-I38D)
2021/03/17(水) 10:20:01.36ID:QeKL1gNm0 配列でやれ
961デフォルトの名無しさん (ワッチョイ 0242-wkB+)
2021/03/17(水) 10:38:31.95ID:CnU6DmD/0 はい
962デフォルトの名無しさん (オッペケ Sr91-Z1Ji)
2021/03/17(水) 10:48:27.37ID:AkcuhhXSr れつ
963デフォルトの名無しさん (ワッチョイ c602-IMun)
2021/03/17(水) 10:49:53.05ID:rwSgtXuJ0 ゴー
964デフォルトの名無しさん (JP 0H8d-IMun)
2021/03/17(水) 10:52:25.95ID:KXbC8pO1H >>960 なおした
Option Explicit
Sub VBA69_932_a()
Dim This As Worksheet
Dim table() As Variant
Dim A_number As Long, B_name As String, C_list As Object
Dim last_row As Long, row_loop As Long, search_loop As Long
Set C_list = CreateObject("Scripting.Dictionary")
Set This = ThisWorkbook.ActiveSheet
last_row = This.Range("A" & Rows.Count).End(xlUp).Row
ReDim table(last_row - 1, 2)
table = This.Range("A1:C" & last_row)
For row_loop = 1 To last_row
A_number = table(row_loop, 1)
C_list.RemoveAll
For search_loop = 1 To last_row
If table(search_loop, 1) = A_number Then
B_name = table(search_loop, 2)
If Not C_list.exists(B_name) Then
C_list.Add (B_name), 0
End If
End If
Next
table(row_loop, 3) = Join(C_list.keys, "・")
Next
This.Range("A1:C" & last_row) = table
End Sub
Option Explicit
Sub VBA69_932_a()
Dim This As Worksheet
Dim table() As Variant
Dim A_number As Long, B_name As String, C_list As Object
Dim last_row As Long, row_loop As Long, search_loop As Long
Set C_list = CreateObject("Scripting.Dictionary")
Set This = ThisWorkbook.ActiveSheet
last_row = This.Range("A" & Rows.Count).End(xlUp).Row
ReDim table(last_row - 1, 2)
table = This.Range("A1:C" & last_row)
For row_loop = 1 To last_row
A_number = table(row_loop, 1)
C_list.RemoveAll
For search_loop = 1 To last_row
If table(search_loop, 1) = A_number Then
B_name = table(search_loop, 2)
If Not C_list.exists(B_name) Then
C_list.Add (B_name), 0
End If
End If
Next
table(row_loop, 3) = Join(C_list.keys, "・")
Next
This.Range("A1:C" & last_row) = table
End Sub
965デフォルトの名無しさん (オッペケ Sr91-Z1Ji)
2021/03/17(水) 10:59:16.82ID:AkcuhhXSr 変数にABCなんてのを使ってる時点でセンスゼロ
後で見て全くわからないバグの温床にしかならない
後で見て全くわからないバグの温床にしかならない
966デフォルトの名無しさん (ワッチョイ 02bd-I38D)
2021/03/17(水) 11:12:33.58ID:QeKL1gNm0 LBound UBound使えよ
967デフォルトの名無しさん (JP 0H8d-IMun)
2021/03/17(水) 11:56:37.23ID:KXbC8pO1H968デフォルトの名無しさん (ワッチョイ 7d5f-6Qoe)
2021/03/17(水) 12:13:35.08ID:YH/YYkmR0 クソコード
969デフォルトの名無しさん (アウウィフ FFc5-rRe5)
2021/03/17(水) 12:27:17.82ID:rAxKrtcHF うんコード
970デフォルトの名無しさん (ワッチョイ 129f-VCbo)
2021/03/17(水) 13:20:25.46ID:4HdAS7ns0971デフォルトの名無しさん (ワッチョイ c602-IMun)
2021/03/17(水) 14:37:09.94ID:rwSgtXuJ0 口だけで何もしない(できない)奴はスルーでいいよ
972デフォルトの名無しさん (ワッチョイ 824f-pJvK)
2021/03/17(水) 15:25:09.30ID:vF0LuwhE0 >>964
うーん
頭ごなしに糞というつもりはないけど
そうだね、もし改善点を挙げるとすれば・・・
まぁ聞き流して良いけどね。
・変数名は一貫性を持たせて、一見して何を意味しているのか分かるようにすること。
例えば頭の1文字が大文字だったり小文字しているのをキャメル形式に統一するとか。
・ActiveSheetは極力使わない。
キチンとした意味を持っているならそれでいいけど、フォームやツールバーから呼ばれることやそのように改修される可能性も考慮してどのシートを使うか明示的に指定する方が良い。
もちろんその際はシート名が変更されてしまうことを考慮して
シート名ではなくシートオブジェクト名を使用する。
・単一責任原則を踏襲する。
一つの関数またはメソッドに、一つの役割のみ持たせて一つの関数またはメソッドが増長になることを防ぐ。
とは言ってもこれは何を一つの役割とするかを決めるセンスが必要で、
これを上手く作れれば「糞」からひとつ脱却出来る。
後は趣味の問題だけど
・Withを使わないことに慣れる。
VBA → VB.Net → C#に移行したとき、Withが無いから慣れておくとちょっと楽。
・CreateObjectは使い所を考える。
CreateObjectはバージョンを考慮せずに済んだりする反面、
メソッドやプロパティのインテリセンスが効かなくなるため、タイプミスをし易くなるという欠点がある。
参照で繋ぐか、CreateObjectで作成するかは
一考した方が良い。
尚、本来Variant型は何でも入ってしまう危険な型なので
使わない方がいいと言いたいところだけど
EXCELのRangeオブジェクトとあまりに相性が良いから使うなとは言えない。
うーん
頭ごなしに糞というつもりはないけど
そうだね、もし改善点を挙げるとすれば・・・
まぁ聞き流して良いけどね。
・変数名は一貫性を持たせて、一見して何を意味しているのか分かるようにすること。
例えば頭の1文字が大文字だったり小文字しているのをキャメル形式に統一するとか。
・ActiveSheetは極力使わない。
キチンとした意味を持っているならそれでいいけど、フォームやツールバーから呼ばれることやそのように改修される可能性も考慮してどのシートを使うか明示的に指定する方が良い。
もちろんその際はシート名が変更されてしまうことを考慮して
シート名ではなくシートオブジェクト名を使用する。
・単一責任原則を踏襲する。
一つの関数またはメソッドに、一つの役割のみ持たせて一つの関数またはメソッドが増長になることを防ぐ。
とは言ってもこれは何を一つの役割とするかを決めるセンスが必要で、
これを上手く作れれば「糞」からひとつ脱却出来る。
後は趣味の問題だけど
・Withを使わないことに慣れる。
VBA → VB.Net → C#に移行したとき、Withが無いから慣れておくとちょっと楽。
・CreateObjectは使い所を考える。
CreateObjectはバージョンを考慮せずに済んだりする反面、
メソッドやプロパティのインテリセンスが効かなくなるため、タイプミスをし易くなるという欠点がある。
参照で繋ぐか、CreateObjectで作成するかは
一考した方が良い。
尚、本来Variant型は何でも入ってしまう危険な型なので
使わない方がいいと言いたいところだけど
EXCELのRangeオブジェクトとあまりに相性が良いから使うなとは言えない。
973デフォルトの名無しさん (スフッ Sda2-MBkE)
2021/03/17(水) 16:55:51.25ID:ttYMdvTCd ワロタ
974デフォルトの名無しさん (オイコラミネオ MM96-nALK)
2021/03/17(水) 19:15:40.71ID:2RS2aA5zM メガネをクイってしながら凄い早口で言ってそう
975デフォルトの名無しさん (ワッチョイ 7d5f-ebGN)
2021/03/17(水) 19:24:46.18ID:lGPcjQzL0976デフォルトの名無しさん (ワッチョイ 7d5f-ebGN)
2021/03/17(水) 19:25:19.68ID:lGPcjQzL0 銘柄w
シート名ね
シート名ね
977デフォルトの名無しさん (ワッチョイ 824f-pJvK)
2021/03/17(水) 19:38:30.30ID:vF0LuwhE0 >>964
ついでにもう一つ言っておくと、
ディクショナリやコレクションの要素数は1バイトで扱える数、つまり1から数えて256まで。
着眼点は良かったけど、3000行を考慮すると
オーバーフローで落ちる可能性があるよ。
ついでにもう一つ言っておくと、
ディクショナリやコレクションの要素数は1バイトで扱える数、つまり1から数えて256まで。
着眼点は良かったけど、3000行を考慮すると
オーバーフローで落ちる可能性があるよ。
978デフォルトの名無しさん (ワッチョイ 4d7c-9blg)
2021/03/17(水) 19:56:32.92ID:lKwA7qQn0979デフォルトの名無しさん (ワッチョイ 7d5f-48g3)
2021/03/17(水) 19:57:39.75ID:lGPcjQzL0 ディクショナリは重複確認用で3000データをまるまる格納する訳じゃないだろ
980デフォルトの名無しさん (ワッチョイ 85e5-IMun)
2021/03/17(水) 20:01:06.73ID:cHLiD5SO0981デフォルトの名無しさん (ワッチョイ 4d7c-9blg)
2021/03/17(水) 20:20:25.27ID:lKwA7qQn0 >>977
嘘を言うな
嘘を言うな
982デフォルトの名無しさん (ワッチョイ c2e6-0etX)
2021/03/17(水) 21:15:41.95ID:X8ZT7dpP0 256ページの辞書なんて存在するの?
983デフォルトの名無しさん (ワッチョイ ee10-H4mC)
2021/03/17(水) 21:56:14.59ID:2ghuU9if0 ウィンドウ上の制限
984デフォルトの名無しさん (ワッチョイ 7d5f-smt8)
2021/03/17(水) 23:33:51.91ID:YH/YYkmR0 経験からくる誤った思い込みだろうね。
1バイト単位の区切りというのは、8ビットパソコン時代からExcelが存在していれば、可能性としてあるが、16ビットパソコンから作っているのに1バイトという制限はありえない。
1バイト単位の区切りというのは、8ビットパソコン時代からExcelが存在していれば、可能性としてあるが、16ビットパソコンから作っているのに1バイトという制限はありえない。
985デフォルトの名無しさん (ワッチョイ 512f-6NWR)
2021/03/17(水) 23:42:58.65ID:n+mEYgox0 ディクショナリとかコレクションとかが、具体的に何を指してるかにもよるんだが
まあ255個とかいう制限のディクショナリやコレクションは思いつかないが
EXCELに限れば、上限255とか256とかいう制限のものは今ですらちょこちょこあるんだぜ
https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%A8%E5%88%B6%E9%99%90-1672b34d-7043-467e-8e27-269d656771c3#ID0EBABAAA=%E6%96%B0%E3%81%97%E3%81%84%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3
まあ255個とかいう制限のディクショナリやコレクションは思いつかないが
EXCELに限れば、上限255とか256とかいう制限のものは今ですらちょこちょこあるんだぜ
https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%A8%E5%88%B6%E9%99%90-1672b34d-7043-467e-8e27-269d656771c3#ID0EBABAAA=%E6%96%B0%E3%81%97%E3%81%84%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3
986デフォルトの名無しさん (ワッチョイ 7d5f-smt8)
2021/03/18(木) 00:01:49.93ID:7fQvPjcg0 >>985
論点ずらしだな。単純に初期のExcelの時代だとメモリ節約で1バイトにしただけで、足りないと判断されたものは、のちに2バイト、4バイト単位に変更されている。
論点ずらしだな。単純に初期のExcelの時代だとメモリ節約で1バイトにしただけで、足りないと判断されたものは、のちに2バイト、4バイト単位に変更されている。
987デフォルトの名無しさん (ワッチョイ 4d7c-9blg)
2021/03/18(木) 00:28:15.06ID:POZoiR5o0 改善点とか言って挙げてる内容は偏ってて微妙だし知識も無いのに態度だけ上からだし昔の人はすごいなぁ
988デフォルトの名無しさん (ワッチョイ 8201-7BBe)
2021/03/18(木) 02:36:30.62ID:Z7yNcrmt0989941 (ワッチョイ 692c-6NWR)
2021/03/18(木) 13:11:04.06ID:VjRMlHUp0 >>941
11111,A子
11112,B子
Ruby で、こういうCSV ファイルを処理した場合、
辞書は、こうなる。
値のtrue に意味はない
{"11111"=>{"A子"=>true}, "11112"=>{"B子"=>true},
"11113"=>{"C子"=>true, "D子"=>true, "E子"=>true},
"11114"=>{"F子"=>true}, "11115"=>{"E子"=>true}}
F子は、重複しない
11111,A子
11112,B子
Ruby で、こういうCSV ファイルを処理した場合、
辞書は、こうなる。
値のtrue に意味はない
{"11111"=>{"A子"=>true}, "11112"=>{"B子"=>true},
"11113"=>{"C子"=>true, "D子"=>true, "E子"=>true},
"11114"=>{"F子"=>true}, "11115"=>{"E子"=>true}}
F子は、重複しない
990941 (ワッチョイ 692c-6NWR)
2021/03/18(木) 13:17:05.45ID:VjRMlHUp0 ただし、このファイルを、1パスでは処理できない
11113,C子
11113,D子
11113,E子
"11113"=>{"C子"=>true, "D子"=>true, "E子"=>true},
C子 を読み込んだ時点で、その行よりも後ろにある、
D子・E子 の情報を取得できないから
だから、>>941
では、データ配列を2回読んでいる
11113,C子
11113,D子
11113,E子
"11113"=>{"C子"=>true, "D子"=>true, "E子"=>true},
C子 を読み込んだ時点で、その行よりも後ろにある、
D子・E子 の情報を取得できないから
だから、>>941
では、データ配列を2回読んでいる
991デフォルトの名無しさん (ワッチョイ 02bd-I38D)
2021/03/18(木) 13:36:31.16ID:pzBF2kYz0 >>964
64bit版の時はlonglongで宣言するようにしないとエラーになる可能性があるよ
64bit版の時はlonglongで宣言するようにしないとエラーになる可能性があるよ
992デフォルトの名無しさん (ワッチョイ 8201-7BBe)
2021/03/18(木) 14:11:19.12ID:Z7yNcrmt0 >>991
3,000行ぐらいなのに?
3,000行ぐらいなのに?
993デフォルトの名無しさん (ワッチョイ 02bd-I38D)
2021/03/18(木) 14:55:42.20ID:pzBF2kYz0 そんな考えならプログラミングやめたほうが良いんじゃない
994デフォルトの名無しさん (ワッチョイ 8201-7BBe)
2021/03/18(木) 15:38:13.36ID:Z7yNcrmt0 何でもかんでもLongLong使うのが正解だとでも思ってるの?
995デフォルトの名無しさん (ワッチョイ 7d5f-smt8)
2021/03/18(木) 15:58:28.07ID:7fQvPjcg0 >>993 はデタラメを言っているな。妄想なのかな。
996デフォルトの名無しさん (ワッチョイ 7d5f-smt8)
2021/03/18(木) 16:01:58.30ID:7fQvPjcg0 他の言語や環境の仕様とごっちゃになってるんだろうな。
Excel VBAで32ビットと64ビットで、よく使われるデータ型に大きい違いがあるなんて聞いたことがない。
Excel VBAで32ビットと64ビットで、よく使われるデータ型に大きい違いがあるなんて聞いたことがない。
997デフォルトの名無しさん (ワッチョイ 8201-7BBe)
2021/03/18(木) 17:13:11.58ID:Z7yNcrmt0 LongLong は 64bit 環境でないとサポートされないとか LongPtr のビットサイズやバリアント型の文字列の付加サイズが 32bit と 64bit 環境で違うとかはあるけどまあ些細といえば些細な話だわな
そもそも現状最大行数が Long 型で扱えるのに >>991 が何を心配してるのか興味ある
そもそも現状最大行数が Long 型で扱えるのに >>991 が何を心配してるのか興味ある
998デフォルトの名無しさん (ワッチョイ 7d5f-smt8)
2021/03/18(木) 17:39:14.84ID:7fQvPjcg0 64ビットというのも何の組み合わせを言っているのかもわからない。
それにしてもここはマイクロソフトのサポートの人がいないか?
この中途半端さが日本マイクロソフト風なんだが。
それにしてもここはマイクロソフトのサポートの人がいないか?
この中途半端さが日本マイクロソフト風なんだが。
999デフォルトの名無しさん (ラクッペペ MMe6-0etX)
2021/03/18(木) 18:16:57.50ID:d7pvjDlRM サポートの人が256個なんて言わないだろ
1000デフォルトの名無しさん (ワッチョイ 8201-7BBe)
2021/03/18(木) 19:19:46.38ID:Z7yNcrmt0 組み合わせ?
単に64bit Excelかどうかだけじゃね?
単に64bit Excelかどうかだけじゃね?
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 95日 18時間 57分 23秒
新しいスレッドを立ててください。
life time: 95日 18時間 57分 23秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【社会】40代以上のおじさん・おばさんは叩いてオッケーという風潮はなぜ加速したのか [七波羅探題★]
- 日本の場合、いつも凶悪な行動に移すのは極左なんだよね。右翼はほとんどなにもしない [201193242]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【朗報】外務省局長、中国側の要求を断固拒否。「高市さんの答弁は日本政府の立場を変えるものではないし、撤回しない」 [519511584]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 【実況】博衣こよりのえちえち歌枠🧪
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
