Excel VBA質問箱 IV

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

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


1225 / 13645 ツリー ←次へ | 前へ→

【75588】言葉に対応した言葉を自動入力する ドカ 14/5/22(木) 19:22 質問[未読]
【75589】Re:言葉に対応した言葉を自動入力する カリーニン 14/5/22(木) 19:47 回答[未読]
【75590】Re:言葉に対応した言葉を自動入力する カリーニン 14/5/22(木) 19:52 発言[未読]
【75592】Re:言葉に対応した言葉を自動入力する ドカ 14/5/22(木) 20:20 発言[未読]
【75593】Re:言葉に対応した言葉を自動入力する カリーニン 14/5/22(木) 20:31 発言[未読]
【75594】Re:言葉に対応した言葉を自動入力する ドカ 14/5/22(木) 20:43 発言[未読]
【75596】Re:言葉に対応した言葉を自動入力する カリーニン 14/5/22(木) 20:51 発言[未読]
【75597】Re:言葉に対応した言葉を自動入力する γ 14/5/22(木) 21:02 発言[未読]
【75599】Re:言葉に対応した言葉を自動入力する ドカ 14/5/22(木) 21:52 お礼[未読]

【75588】言葉に対応した言葉を自動入力する
質問  ドカ  - 14/5/22(木) 19:22 -

引用なし
パスワード
   ある列に色々な言葉が入っています。
その列の言葉ごとに、色を表す言葉をマクロで入れたいです。
ある列の最初の言葉(本屋)が書かれているセルがアクティブになっていて、
そこを基準として処理をするものとします。

ある列 隣の列
本屋   赤
花屋   青
本屋   赤
鞄    黄
靴下   緑
鞄    黄
・    ・
・    ・
・    ・

色は、赤、青、黄、緑、水色、紫、橙・・・・と10種類くらいでしょうか。

お分かりの方、よろしくお願いいたします。

【75589】Re:言葉に対応した言葉を自動入力する
回答  カリーニン  - 14/5/22(木) 19:47 -

引用なし
パスワード
   一般機能のVLOOKUPを使う、作業用セルに対応表を作っておいてFindメソッドなどで引っ張ってくる、などいろんな方法があります。

Dictionaryオブジェクトを使った方法です。

Sub test()
Dim mydic As Object
Dim mykey As String
Dim r As Range
Dim c As Range
 Set mydic = CreateObject("Scripting.Dictionary")
 mydic.Add "本屋", "赤"
 mydic.Add "花屋", "青"
 mydic.Add "鞄", "黄"
 mydic.Add "靴下", "緑"
 Set r = Selection
 For Each c In r
  mykey = c.Value
  If mydic.exists(mykey) Then c.Offset(, 1).Value = mydic(mykey)
 Next c
End Sub

【75590】Re:言葉に対応した言葉を自動入力する
発言  カリーニン  - 14/5/22(木) 19:52 -

引用なし
パスワード
    >Next c

この下に下記のコードを付加しておいてください。

 mydic.RemoveAll
 Set mydic = Nothing

【75592】Re:言葉に対応した言葉を自動入力する
発言  ドカ  - 14/5/22(木) 20:20 -

引用なし
パスワード
   ▼カリーニン さん:
回答ありがとうございます。

本屋や花屋はいつも決まった言葉ではなく、どんな言葉が出てくるかわかりません。
ですから、コードの中に本屋などを書くことなく実現したいのですが。

【75593】Re:言葉に対応した言葉を自動入力する
発言  カリーニン  - 14/5/22(木) 20:31 -

引用なし
パスワード
   >本屋や花屋はいつも決まった言葉ではなく、どんな言葉が出てくるかわかりません。
>ですから、コードの中に本屋などを書くことなく実現したいのですが。

↓は試しましたか?

>一般機能のVLOOKUPを使う、作業用セルに対応表を作っておいてFindメソッドなどで引っ張ってくる、などいろんな方法があります。

【75594】Re:言葉に対応した言葉を自動入力する
発言  ドカ  - 14/5/22(木) 20:43 -

引用なし
パスワード
   ▼カリーニン さん:
対応表を作るなど事前作業をすることが大変なので、マクロで自動的に行いたいと思っています。

お分かりの方よろしくお願いいたします。

【75596】Re:言葉に対応した言葉を自動入力する
発言  カリーニン  - 14/5/22(木) 20:51 -

引用なし
パスワード
   おっしゃってることが矛盾しています。

>本屋や花屋はいつも決まった言葉ではなく、どんな言葉が出てくるかわかりません。
>ですから、コードの中に本屋などを書くことなく実現したいのですが。

となるとセルなどに対応表を作っておくしかないと思います。

>対応表を作るなど事前作業をすることが大変なので、マクロで自動的に行いたいと思っています。

セルなどに対応表を作っておかないとなるとハードコーディングするしかないと思うのですが。
最終的にどういうことをしたいのかが見えません。

【75597】Re:言葉に対応した言葉を自動入力する
発言  γ  - 14/5/22(木) 21:02 -

引用なし
パスワード
   単に、同じものには同じ色を、異なるものには異なる色を対応させたい、
ということですか?
それなら下記のようなことでしょうか。

Sub test()
  Dim colorArray
  Dim dic As Object
  Dim k As Long, j As Long
  Dim s As String

  colorArray = Split("赤、青、黄、緑、水色、紫、橙", "、")

  Set dic = CreateObject("Scripting.Dictionary")

  k = -1
  For j = 1 To Range("A1").End(xlDown).Row
    s = Cells(j, 1).Value
    If Not dic.Exists(s) Then
      k = k + 1
      dic(s) = colorArray(k)
    End If
    Cells(j, 2).Value = dic(s)
  Next

  Set dic = Nothing
End Sub

【75599】Re:言葉に対応した言葉を自動入力する
お礼  ドカ  - 14/5/22(木) 21:52 -

引用なし
パスワード
   ▼γ さん:回答ありがとうございます。
うまくいきました。


Sub test()
  Dim colorArray
  Dim dic As Object
  Dim k As Long, j As Long
  Dim s As String
  Dim cellA As Range

  colorArray = Split("赤、青、黄、緑、水色、紫、橙", "、")

  Set dic = CreateObject("Scripting.Dictionary")

  Set cellA = ActiveCell
  
  k = -1
  For j = 1 To cellA.End(xlDown).Row - cellA.Row + 1
    's = Cells(j, 1).Value
    s = cellA.Offset(j - 1, 0).Value
    If Not dic.Exists(s) Then
      k = k + 1
      dic(s) = colorArray(k)
    End If
    cellA.Offset(j - 1, 1).Value = dic(s)
  Next

  Set dic = Nothing
End Sub

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