Excel VBA 質問スレ Part69

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ 3fad-qZ/b)2020/12/13(日) 00:22:23.67ID:Fd224klc0
!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

0952デフォルトの名無しさん (JP 0H8d-IMun)2021/03/16(火) 22:05:23.00ID:gGJzxP62H
3000行もあるのに、それじゃ考えるのが大変だ

0953デフォルトの名無しさん (ワッチョイ ee10-H4mC)2021/03/16(火) 23:39:47.76ID:FDp5iKWO0
手作業でAからFカップを調べる作業にVBA使うとか
お前ら男として終わってるわマジで

0954デフォルトの名無しさん (ワッチョイ 85a7-Uq3u)2021/03/17(水) 00:14:55.79ID:8Ujh9QFC0
ろーずって薔薇じゃないの?

0955デフォルトの名無しさん (ワッチョイ 4d7c-9blg)2021/03/17(水) 00:20:54.29ID:lKwA7qQn0
そうだよ

0956デフォルトの名無しさん (JP 0H8d-IMun)2021/03/17(水) 00:54:57.81ID:KXbC8pO1H
わざと間違えるっていう2chから続く伝統芸
https://i.imgur.com/h4Fip2L.jpg

0957デフォルトの名無しさん (ワッチョイ 1291-seln)2021/03/17(水) 02:44:52.10ID:LQZUutD10
>>933
いきなりCellsで始まるのはいただけないなw
できればブックから始める習慣を付けて欲しい。

0958デフォルトの名無しさん (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

0959デフォルトの名無しさん (ワッチョイ 2e8f-IMun)2021/03/17(水) 10:07:11.87ID:wJCP0FMq0
>>933
謎の変数名を多用するのやめてくれ。見る気が一瞬で失せる。
ネスト深くするのも罪悪感感じてくれ

0960デフォルトの名無しさん (ワッチョイ 02bd-I38D)2021/03/17(水) 10:20:01.36ID:QeKL1gNm0
配列でやれ

0961デフォルトの名無しさん (ワッチョイ 0242-wkB+)2021/03/17(水) 10:38:31.95ID:CnU6DmD/0
はい

0962デフォルトの名無しさん (オッペケ Sr91-Z1Ji)2021/03/17(水) 10:48:27.37ID:AkcuhhXSr
れつ

0963デフォルトの名無しさん (ワッチョイ c602-IMun)2021/03/17(水) 10:49:53.05ID:rwSgtXuJ0
ゴー

0964デフォルトの名無しさん (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

0965デフォルトの名無しさん (オッペケ Sr91-Z1Ji)2021/03/17(水) 10:59:16.82ID:AkcuhhXSr
変数にABCなんてのを使ってる時点でセンスゼロ
後で見て全くわからないバグの温床にしかならない

0966デフォルトの名無しさん (ワッチョイ 02bd-I38D)2021/03/17(水) 11:12:33.58ID:QeKL1gNm0
LBound UBound使えよ

0967デフォルトの名無しさん (JP 0H8d-IMun)2021/03/17(水) 11:56:37.23ID:KXbC8pO1H
>>965
お手本見せて
>>966
データ数は変数に入れたから改めて調べる必要ないという判断

0968デフォルトの名無しさん (ワッチョイ 7d5f-6Qoe)2021/03/17(水) 12:13:35.08ID:YH/YYkmR0
クソコード

0969デフォルトの名無しさん (アウウィフ FFc5-rRe5)2021/03/17(水) 12:27:17.82ID:rAxKrtcHF
うんコード

0970デフォルトの名無しさん (ワッチョイ 129f-VCbo)2021/03/17(水) 13:20:25.46ID:4HdAS7ns0
変数名に対する識者の見解
https://mevius.5ch.net/test/read.cgi/bsoft/1608362765/253n

0971デフォルトの名無しさん (ワッチョイ c602-IMun)2021/03/17(水) 14:37:09.94ID:rwSgtXuJ0
口だけで何もしない(できない)奴はスルーでいいよ

0972デフォルトの名無しさん (ワッチョイ 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オブジェクトとあまりに相性が良いから使うなとは言えない。

0973デフォルトの名無しさん (スフッ Sda2-MBkE)2021/03/17(水) 16:55:51.25ID:ttYMdvTCd
ワロタ

メガネをクイってしながら凄い早口で言ってそう

0975デフォルトの名無しさん (ワッチョイ 7d5f-ebGN)2021/03/17(水) 19:24:46.18ID:lGPcjQzL0
>>967
940が一番何をしてるのか分かりやすい
これにシート銘柄をしっかり記述すればよいのでは?

0976デフォルトの名無しさん (ワッチョイ 7d5f-ebGN)2021/03/17(水) 19:25:19.68ID:lGPcjQzL0
銘柄w
シート名ね

0977デフォルトの名無しさん (ワッチョイ 824f-pJvK)2021/03/17(水) 19:38:30.30ID:vF0LuwhE0
>>964
ついでにもう一つ言っておくと、
ディクショナリやコレクションの要素数は1バイトで扱える数、つまり1から数えて256まで。
着眼点は良かったけど、3000行を考慮すると
オーバーフローで落ちる可能性があるよ。

0978デフォルトの名無しさん (ワッチョイ 4d7c-9blg)2021/03/17(水) 19:56:32.92ID:lKwA7qQn0
>>956
ちがう
金星(まぁず)ちゃんというDQNネームがあった

0979デフォルトの名無しさん (ワッチョイ 7d5f-48g3)2021/03/17(水) 19:57:39.75ID:lGPcjQzL0
ディクショナリは重複確認用で3000データをまるまる格納する訳じゃないだろ

0980デフォルトの名無しさん (ワッチョイ 85e5-IMun)2021/03/17(水) 20:01:06.73ID:cHLiD5SO0
>>977
>ディクショナリやコレクションの要素数は1バイトで扱える数、つまり1から数えて256まで。
初耳

0981デフォルトの名無しさん (ワッチョイ 4d7c-9blg)2021/03/17(水) 20:20:25.27ID:lKwA7qQn0
>>977
嘘を言うな

0982デフォルトの名無しさん (ワッチョイ c2e6-0etX)2021/03/17(水) 21:15:41.95ID:X8ZT7dpP0
256ページの辞書なんて存在するの?

0983デフォルトの名無しさん (ワッチョイ ee10-H4mC)2021/03/17(水) 21:56:14.59ID:2ghuU9if0
ウィンドウ上の制限

0984デフォルトの名無しさん (ワッチョイ 7d5f-smt8)2021/03/17(水) 23:33:51.91ID:YH/YYkmR0
経験からくる誤った思い込みだろうね。

1バイト単位の区切りというのは、8ビットパソコン時代からExcelが存在していれば、可能性としてあるが、16ビットパソコンから作っているのに1バイトという制限はありえない。

0985デフォルトの名無しさん (ワッチョイ 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

0986デフォルトの名無しさん (ワッチョイ 7d5f-smt8)2021/03/18(木) 00:01:49.93ID:7fQvPjcg0
>>985
論点ずらしだな。単純に初期のExcelの時代だとメモリ節約で1バイトにしただけで、足りないと判断されたものは、のちに2バイト、4バイト単位に変更されている。

0987デフォルトの名無しさん (ワッチョイ 4d7c-9blg)2021/03/18(木) 00:28:15.06ID:POZoiR5o0
改善点とか言って挙げてる内容は偏ってて微妙だし知識も無いのに態度だけ上からだし昔の人はすごいなぁ

0988デフォルトの名無しさん (ワッチョイ 8201-7BBe)2021/03/18(木) 02:36:30.62ID:Z7yNcrmt0
>>985
例えば列の幅が255文字なのは別に1バイトで管理してるわけじゃなくて上限を設定してるだけだろ
そう言うのはExcelに限った話じゃないよ

0989941 (ワッチョイ 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子は、重複しない

0990941 (ワッチョイ 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回読んでいる

0991デフォルトの名無しさん (ワッチョイ 02bd-I38D)2021/03/18(木) 13:36:31.16ID:pzBF2kYz0
>>964
64bit版の時はlonglongで宣言するようにしないとエラーになる可能性があるよ

0992デフォルトの名無しさん (ワッチョイ 8201-7BBe)2021/03/18(木) 14:11:19.12ID:Z7yNcrmt0
>>991
3,000行ぐらいなのに?

0993デフォルトの名無しさん (ワッチョイ 02bd-I38D)2021/03/18(木) 14:55:42.20ID:pzBF2kYz0
そんな考えならプログラミングやめたほうが良いんじゃない

0994デフォルトの名無しさん (ワッチョイ 8201-7BBe)2021/03/18(木) 15:38:13.36ID:Z7yNcrmt0
何でもかんでもLongLong使うのが正解だとでも思ってるの?

0995デフォルトの名無しさん (ワッチョイ 7d5f-smt8)2021/03/18(木) 15:58:28.07ID:7fQvPjcg0
>>993 はデタラメを言っているな。妄想なのかな。

0996デフォルトの名無しさん (ワッチョイ 7d5f-smt8)2021/03/18(木) 16:01:58.30ID:7fQvPjcg0
他の言語や環境の仕様とごっちゃになってるんだろうな。

Excel VBAで32ビットと64ビットで、よく使われるデータ型に大きい違いがあるなんて聞いたことがない。

0997デフォルトの名無しさん (ワッチョイ 8201-7BBe)2021/03/18(木) 17:13:11.58ID:Z7yNcrmt0
LongLong は 64bit 環境でないとサポートされないとか LongPtr のビットサイズやバリアント型の文字列の付加サイズが 32bit と 64bit 環境で違うとかはあるけどまあ些細といえば些細な話だわな
そもそも現状最大行数が Long 型で扱えるのに >>991 が何を心配してるのか興味ある

0998デフォルトの名無しさん (ワッチョイ 7d5f-smt8)2021/03/18(木) 17:39:14.84ID:7fQvPjcg0
64ビットというのも何の組み合わせを言っているのかもわからない。

それにしてもここはマイクロソフトのサポートの人がいないか?

この中途半端さが日本マイクロソフト風なんだが。

0999デフォルトの名無しさん (ラクッペペ MMe6-0etX)2021/03/18(木) 18:16:57.50ID:d7pvjDlRM
サポートの人が256個なんて言わないだろ

1000デフォルトの名無しさん (ワッチョイ 8201-7BBe)2021/03/18(木) 19:19:46.38ID:Z7yNcrmt0
組み合わせ?
単に64bit Excelかどうかだけじゃね?

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 95日 18時間 57分 23秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。