Excel VBA 質問スレ Part69at TECH
Excel VBA 質問スレ Part69 - 暇つぶし2ch946:932
21/03/16 18:32:29.43 yEkj4Jws0.net
>>940
度々ありがとうございます!
最初ヤツでも今の所大丈夫そうでしたが、今後はこちらを使わせていただきます!
他の方もありがとうございます!

947:デフォルトの名無しさん
21/03/16 19:02:04.81 EUyNpk5n0.net
>>942
rubyスレだと相手にもされないからわざわざ違うスレに来てるかわいそうな人だよ

948:デフォルトの名無しさん
21/03/16 21:06:28.11 8Gn4pDRu0.net
名前の例が○子とは、そうとうなジイさんだなw

949:デフォルトの名無しさん
21/03/16 21:12:32.28 gGJzxP62H.net
>>945
現代だとどう書くの?
ランキングによると結が人気あるらしいから結A、結B、結Cか

950:デフォルトの名無しさん
21/03/16 21:15:14.58 lullOsMB0.net
そら「百合(ろーず)」よ

951:デフォルトの名無しさん
21/03/16 21:28:58.74 8Gn4pDRu0.net
>>946
なんで女なのか?

952:デフォルトの名無しさん
21/03/16 21:42:16.30 gGJzxP62H.net
そんなこと言ったら、なぜ日本人なのか、なぜ人類なのか

953:デフォルトの名無しさん
21/03/16 21:51:49.14 8Gn4pDRu0.net
太郎、次郎、三郎、四郎、五郎でいいだろ。

954:デフォルトの名無しさん
21/03/16 21:55:45.14 YCs8uHit0.net
なんで男なのか?

955:デフォルトの名無しさん
21/03/16 22:05:23.00 gGJzxP62H.net
3000行もあるのに、それじゃ考えるのが大変だ

956:デフォルトの名無しさん
21/03/16 23:39:47.76 FDp5iKWO0.net
手作業でAからFカップを調べる作業にVBA使うとか
お前ら男として終わってるわマジで

957:デフォルトの名無しさん
21/03/17 00:14:55.79 8Ujh9QFC0.net
ろーずって薔薇じゃないの?

958:デフォルトの名無しさん
21/03/17 00:20:54.29 lKwA7qQn0.net
そうだよ

959:デフォルトの名無しさん
21/03/17 00:54:57.81 KXbC8pO1H.net
わざと間違えるっていう2chから続く伝統芸
URLリンク(i.imgur.com)

960:デフォルトの名無しさん
21/03/17 02:44:52.10 LQZUutD10.net
>>933
いきなりCellsで始まるのはいただけないなw
できればブックから始める習慣を付けて欲しい。

961:デフォルトの名無しさん
21/03/17 03:45:50.60 KXbC8pO1H.net
>>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

962:デフォルトの名無しさん
21/03/17 10:07:11.87 wJCP0FMq0.net
>>933
謎の変数名を多用するのやめてくれ。見る気が一瞬で失せる。
ネスト深くするのも罪悪感感じてくれ

963:デフォルトの名無しさん
21/03/17 10:20:01.36 QeKL1gNm0.net
配列でやれ

964:デフォルトの名無しさん
21/03/17 10:38:31.95 CnU6DmD/0.net
はい

965:デフォルトの名無しさん
21/03/17 10:48:27.37 AkcuhhXSr.net
れつ

966:デフォルトの名無しさん
21/03/17 10:49:53.05 rwSgtXuJ0.net
ゴー

967:デフォルトの名無しさん
21/03/17 10:52:25.95 KXbC8pO1H.net
>>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

968:デフォルトの名無しさん
21/03/17 10:59:16.82 AkcuhhXSr.net
変数にABCなんてのを使ってる時点でセンスゼロ
後で見て全くわからないバグの温床にしかならない

969:デフォルトの名無しさん
21/03/17 11:12:33.58 QeKL1gNm0.net
LBound UBound使えよ

970:デフォルトの名無しさん
21/03/17 11:56:37.23 KXbC8pO1H.net
>>965
お手本見せて
>>966
データ数は変数に入れたから改めて調べる必要ないという判断

971:デフォルトの名無しさん
21/03/17 12:13:35.08 YH/YYkmR0.net
クソコード

972:デフォルトの名無しさん
21/03/17 12:27:17.82 rAxKrtcHF.net
うんコード

973:デフォルトの名無しさん
21/03/17 13:20:25.46 4HdAS7ns0.net
変数名に対する識者の見解
スレリンク(bsoft板:253番)n

974:デフォルトの名無しさん
21/03/17 14:37:09.94 rwSgtXuJ0.net
口だけで何もしない(できない)奴はスルーでいいよ

975:デフォルトの名無しさん
21/03/17 15:25:09.30 vF0LuwhE0.net
>>964
うーん
頭ごなしに糞というつもりはないけど
そうだね、もし改善点を挙げるとすれば・・・
まぁ聞き流して良いけどね。
・変数名は一貫性を持たせて、一見して何を意味しているのか分かるようにすること。
例えば頭の1文字が大文字だったり小文字しているのをキャメル形式に統一するとか。
・ActiveSheetは極力使わない。
キチンとした意味を持っているならそれでいいけど、フォームやツールバーから呼ばれることやそのように改修される可能性も考慮してどのシートを使うか明示的に指定する方が良い。
もちろんその際はシート名が変更されてしまうことを考慮して
シート名ではなくシートオブジェクト名を使用する。
・単一責任原則を踏襲する。
一つの関数またはメソッドに、一つの役割のみ持たせて一つの関数またはメソッドが増長になることを防ぐ。
とは言ってもこれは何を一つの役割とするかを決めるセンスが必要で、
これを上手く作れれば「糞」からひとつ脱却出来る。
後は趣味の問題だけど
・Withを使わないことに慣れる。
VBA → VB.Net → C#に移行したとき、Withが無いから慣れておくとちょっと楽。
・CreateObjectは使い所を考える。
CreateObjectはバージョンを考慮せずに済んだりする反面、
メソッドやプロパティのインテリセンスが効かなくなるため、タイプミスをし易くなるという欠点がある。
参照で繋ぐか、CreateObjectで作成するかは
一考した方が良い。
尚、本来Variant型は何でも入ってしまう危険な型なので
使わない方がいいと言いたいところだけど
EXCELのRangeオブジェクトとあまりに相性が良いから使うなとは言えない。

976:デフォルトの名無しさん
21/03/17 16:55:51.25 ttYMdvTCd.net
ワロタ

977:デフォルトの名無しさん
21/03/17 19:15:40.71 2RS2aA5zM.net
メガネをクイってしながら凄い早口で言ってそう

978:デフォルトの名無しさん
21/03/17 19:24:46.18 lGPcjQzL0.net
>>967
940が一番何をしてるのか分かりやすい
これにシート銘柄をしっかり記述すればよいのでは?

979:デフォルトの名無しさん
21/03/17 19:25:19.68 lGPcjQzL0.net
銘柄w
シート名ね

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

981:デフォルトの名無しさん
21/03/17 19:56:32.92 lKwA7qQn0.net
>>956
ちがう
金星(まぁず)ちゃんというDQNネームがあった

982:デフォルトの名無しさん
21/03/17 19:57:39.75 lGPcjQzL0.net
ディクショナリは重複確認用で3000データをまるまる格納する訳じゃないだろ

983:デフォルトの名無しさん
21/03/17 20:01:06.73 cHLiD5SO0.net
>>977
>ディクショナリやコレクションの要素数は1バイトで扱える数、つまり1から数えて256まで。
初耳

984:デフォルトの名無しさん
21/03/17 20:20:25.27 lKwA7qQn0.net
>>977
嘘を言うな

985:デフォルトの名無しさん
21/03/17 21:15:41.95 X8ZT7dpP0.net
256ページの辞書なんて存在するの?

986:デフォルトの名無しさん
21/03/17 21:56:14.59 2ghuU9if0.net
ウィンドウ上の制限

987:デフォルトの名無しさん
21/03/17 23:33:51.91 YH/YYkmR0.net
経験からくる誤った思い込みだろうね。
1バイト単位の区切りというのは、8ビットパソコン時代からExcelが存在していれば、可能性としてあるが、16ビットパソコンから作っているのに1バイトという制限はありえない。

988:デフォルトの名無しさん
21/03/17 23:42:58.65 n+mEYgox0.net
ディクショナリとかコレクションとかが、具体的に何を指してるかにもよるんだが
まあ255個とかいう制限のディクショナリやコレクションは思いつかないが
EXCELに限れば、上限255とか256とかいう制限のものは今ですらちょこちょこあるんだぜ
URLリンク(support.microsoft.com)

989:デフォルトの名無しさん
21/03/18 00:01:49.93 7fQvPjcg0.net
>>985
論点ずらしだな。単純に初期のExcelの時代だとメモリ節約で1バイトにしただけで、足りないと判断されたものは、のちに2バイト、4バイト単位に変更されている。

990:デフォルトの名無しさん
21/03/18 00:28:15.06 POZoiR5o0.net
改善点とか言って挙げてる内容は偏ってて微妙だし知識も無いのに態度だけ上からだし昔の人はすごいなぁ

991:デフォルトの名無しさん
21/03/18 02:36:30.62 Z7yNcrmt0.net
>>985
例えば列の幅が255文字なのは別に1バイトで管理してるわけじゃなくて上限を設定してるだけだろ
そう言うのはExcelに限った話じゃないよ

992:941
21/03/18 13:11:04.06 VjRMlHUp0.net
>>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子は、重複しない

993:941
21/03/18 13:17:05.45 VjRMlHUp0.net
ただし、このファイルを、1パスでは処理できない
11113,C子
11113,D子
11113,E子
"11113"=>{"C子"=>true, "D子"=>true, "E子"=>true},
C子 を読み込んだ時点で、その行よりも後ろにある、
D子・E子 の情報を取得できないから
だから、>>941
では、データ配列を2回読んでいる

994:デフォルトの名無しさん
21/03/18 13:36:31.16 pzBF2kYz0.net
>>964
64bit版の時はlonglongで宣言するようにしないとエラーになる可能性があるよ

995:デフォルトの名無しさん
21/03/18 14:11:19.12 Z7yNcrmt0.net
>>991
3,000行ぐらいなのに?

996:デフォルトの名無しさん
21/03/18 14:55:42.20 pzBF2kYz0.net
そんな考えならプログラミングやめたほうが良いんじゃない

997:デフォルトの名無しさん
21/03/18 15:38:13.36 Z7yNcrmt0.net
何でもかんでもLongLong使うのが正解だとでも思ってるの?

998:デフォルトの名無しさん
21/03/18 15:58:28.07 7fQvPjcg0.net
>>993 はデタラメを言っているな。妄想なのかな。

999:デフォルトの名無しさん
21/03/18 16:01:58.30 7fQvPjcg0.net
他の言語や環境の仕様とごっちゃになってるんだろうな。
Excel VBAで32ビットと64ビットで、よく使われるデータ型に大きい違いがあるなんて聞いたことがない。

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

1001:デフォルトの名無しさん
21/03/18 17:39:14.84 7fQvPjcg0.net
64ビットというのも何の組み合わせを言っているのかもわからない。
それにしてもここはマイクロソフトのサポートの人がいないか?
この中途半端さが日本マイクロソフト風なんだが。

1002:デフォルトの名無しさん
21/03/18 18:16:57.50 d7pvjDlRM.net
サポートの人が256個なんて言わないだろ

1003:デフォルトの名無しさん
21/03/18 19:19:46.38 Z7yNcrmt0.net
組み合わせ?
単に64bit Excelかどうかだけじゃね?

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

1005:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch