Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


41372 / 76736 ←次へ | 前へ→

【40444】Re:星取表を作成するマクロ
発言  ichinose  - 06/7/13(木) 20:53 -

引用なし
パスワード
   こんばんは。

>もう少しわかりやすいコードにならないかと言われてしまいまして、困ってます。
>(ハッシュとかがわからないみたいです。)
Dictionaryをハッシュと呼ぶのは私は抵抗がありますが・・・。
まあそれはさておき、
これの仕組みは簡単ですよね!!
私は、このサイトの投稿でしか使ったことがありませんが、
そもそもプロパティやメソッドも少ないし・・・。
わかりやすいオブジェクトです。

わからなかったら覚えなさい!!
というのが本当は結論のような気がしますけどねえ

これをDictionaryを使わないでとなると・・・。

Dictionaryと同じような処理コードを書かなくてはなりませんよね!!


このデータってアルファベットだけなんですか?
「漢字」とか「カタカナ」とか「ひらがな」はないのですか?

これと同じ処理にしようとすると、Match関数が使えないですね?
(Match比較がテキスト比較だから・・・)


標準モジュールに
'==================================================================
Sub main()
  Dim w As Worksheet, nw As Worksheet
  Dim i As Integer
  Call open_tbl(Worksheets.Count + 1)
  For i = 1 To Worksheets.Count
    With Worksheets(i)
      For Each crng In .Range("a1", .Cells(.Rows.Count, "a").End(xlUp))
        Call put_tbl(crng.Value, i + 1, "○")
        Next
      
      End With
    Next i
  Set nw = Worksheets.Add(After:=Worksheets(Worksheets.Count))
  With nw
   .Name = "結果整理"
   .Range("a1", .Cells(get_tblcnt, Worksheets.Count)).Value = Application.Transpose(get_tbl())
   End With
  Call close_tbl
End Sub


別の標準モジュールに
'Dictionaryオブジェクトの代わりのコード
'=================================================================
Private myarray() As Variant
Private colnum As Long
Private fptr As Long
'=================================================================
sub open_tbl(列数 As Long)
'テーブルi/oを初期化する IN:テーブル列の数(キー列も含む)
  ReDim myarray(1 To 列数, 1 To 1)
  colnum = 列数
  fptr = 1
End sub
'=================================================================
Sub close_tbl()
'テーブルi/oの終了処理
  Erase myarray()
  colnum = 0
  fptr=0
End Sub
'=================================================================
Sub put_tbl(key As Variant, colidx As Long, myvalue As Variant)
'テーブルにデータをセットする
' in key 検索キーデータ colidx--myvalueをセットする列数 myvalue--セットするデータ
  Dim idx As Long
  Dim f_flg As Long '0:keyで検索の結果見つからない 1:見つかった
  f_flg = 0
  For idx = 1 To fptr - 1
    If myarray(1, idx) = key Then
     GoSub put_proc
     f_flg = 1
     Exit For
     End If
    Next idx
  If f_flg = 0 Then
    ReDim Preserve myarray(1 To colnum, 1 To fptr)
    idx = fptr
    myarray(1, idx) = key
    fptr = fptr + 1
    GoSub put_proc
    End If
  Exit Sub
put_proc: 'in--idx colidx myvalue out:myarray()
  myarray(colidx, idx) = myvalue
  Return
End Sub
'=================================================================
Function get_tbl() As Variant
'テーブルを取得する
  get_tbl = myarray()
End Function
'=================================================================
Function get_tblcnt() As Long
'テーブル要素数を取得する
  get_tblcnt = UBound(myarray(), 2)
End Function


でmainを実行してみてください。

Dictionaryの有用性を解いたほうがよいと思いますが・・・。

0 hits

【40430】星取表を作成するマクロ ちくたく 06/7/13(木) 16:13 質問
【40437】Re:星取表を作成するマクロ ハト 06/7/13(木) 17:48 発言
【40444】Re:星取表を作成するマクロ ichinose 06/7/13(木) 20:53 発言
【40475】Re:星取表を作成するマクロ ちくたく 06/7/14(金) 14:05 お礼

41372 / 76736 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free