Excel VBA質問箱 IV

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

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


9685 / 13644 ツリー ←次へ | 前へ→

【26013】表の参照方法について ななこ 05/6/21(火) 20:19 質問[未読]
【26014】Re:表の参照方法について かみちゃん 05/6/21(火) 20:30 発言[未読]
【26015】Re:表の参照方法について ななこ 05/6/21(火) 20:42 回答[未読]
【26016】Re:表の参照方法について かみちゃん 05/6/21(火) 21:08 発言[未読]
【26017】Re:表の参照方法について ななこ 05/6/21(火) 21:18 お礼[未読]
【26018】Re:表の参照方法について かみちゃん 05/6/21(火) 22:25 回答[未読]

【26013】表の参照方法について
質問  ななこ  - 05/6/21(火) 20:19 -

引用なし
パスワード
   表の参照方法について、良い案があったら教えて下さい。

下記のような3つの条件から成り立つ表があります。
この表のXの値を参照したいのですが・・・

「A-1 and B-1 and C-1 の場合・・・」
とIf文を延々と書けばできるのですが、下記のような
表が複数あり、しかも表がかなり大きいので、これだと
非効率的です。

きっと、よい方法があると思うのですが、VBA初心者の
ため全くよい方法が思いつきません。
お分かりの方、ぜひ教えて下さい。
(ヒントだけでも構いませんので。)宜しくお願いします。

   
     C-1 D-1 E-1
A-1 B-1  X  X  X
    B-2  X  X  X
    B-3  X  X  X
    B-4  X  X  X
A-2 B-1  X  X  X 
    B-2  X  X  X
    B-3  X  X  X
    B-4  X  X  X

【26014】Re:表の参照方法について
発言  かみちゃん  - 05/6/21(火) 20:30 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>この表のXの値を参照したいのですが・・・

     C-1 D-1 E-1
A-1 B-1  X  X  X

Xの値が3つあるのですが、どれでしょうか?

もしかして、

     C-1 D-1 E-1
A-1 B-1  X  Y  Z

の表の場合

A-1 And B-1 And C-1 のときは、X
A-1 And B-1 And D-1 のときは、Y
A-1 And B-1 And E-1 のときは、Z
を取得したいということでしょうか?

あと、C-1、D-1、E-1は、本当にこの文字列ですか?
C、D、Eという文字を利用して、列番号を参照することも考えられるからです。

あと、これを数式ではなく、VBAでしたいということでしょうか?

【26015】Re:表の参照方法について
回答  ななこ  - 05/6/21(火) 20:42 -

引用なし
パスワード
   早速レスありがとうございます!

>Xの値が3つあるのですが、どれでしょうか?
>もしかして、
>     C-1 D-1 E-1
>A-1 B-1  X  Y  Z
>の表の場合
>
>A-1 And B-1 And C-1 のときは、X
>A-1 And B-1 And D-1 のときは、Y
>A-1 And B-1 And E-1 のときは、Z
>を取得したいということでしょうか?

そうです。
先ほどの表には全てXと書きましたが、
正しくは、上記のようにバラバラの値が入ってます。


>あと、C-1、D-1、E-1は、本当にこの文字列ですか?
>C、D、Eという文字を利用して、列番号を参照することも考えられるからです。

何かと説明不足でゴメンなさい。
A-1とか書いているところは全然違う文字列です。
ただの数値や文字列です。

>あと、これを数式ではなく、VBAでしたいということでしょうか?

そうです。
この表の値を参照して、さらにその値をもとに計算したり
他の処理をしなくてはいけないので、VBAで実現させたいのです。

【26016】Re:表の参照方法について
発言  かみちゃん  - 05/6/21(火) 21:08 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>あと、C-1、D-1、E-1は、本当にこの文字列ですか?
>>C、D、Eという文字を利用して、列番号を参照することも考えられるからです。
>
>何かと説明不足でゴメンなさい。
>A-1とか書いているところは全然違う文字列です。
>ただの数値や文字列です。

最初に、A-1 と B-1 の行見出しを結合して、別の列に書き出します。
そうすると、A-1B-1というような文字列ができます。

  A  B  C  D  E   F
1      C-1 D-1 E-1
2 A-1 B-1  X  Y  Z  A-1B-1
というような感じです。(ここでは、F列が作業例です)

それを検索して、一致したら行番号を取得します。
次に列見出しの中からC-1、D-1、E-1を探して列番号を取得します。
取得された行番号、列番号のセルの値が取得したい値
ということになるのではないでしょうか?
Find メソッドを使えばできるような気がしますので、一度ヘルプなどで調べてみてください。

【26017】Re:表の参照方法について
お礼  ななこ  - 05/6/21(火) 21:18 -

引用なし
パスワード
   かみちゃんさん、ありがとうございます♪

明日、早速会社で試してみます!

【26018】Re:表の参照方法について
回答  かみちゃん  - 05/6/21(火) 22:25 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>そうすると、A-1B-1というような文字列ができます。
>
>  A  B  C  D  E   F
>1      C-1 D-1 E-1
>2 A-1 B-1  X  Y  Z  A-1B-1
>というような感じです。(ここでは、F列が作業例です)
>
>それを検索して、一致したら行番号を取得します。
>次に列見出しの中からC-1、D-1、E-1を探して列番号を取得します。
>取得された行番号、列番号のセルの値が取得したい値
>ということになるのではないでしょうか?
>Find メソッドを使えばできるような気がしますので、一度ヘルプなどで調べてみてください。

F列に作業列を作ってあることを前提にですが、次のようなコードでできましたので、参考にしてみてください。
Option Explicit
Sub Macro1()
 Dim TargetValue1 As String
 Dim TargetValue2 As String
 Dim TargetValue3 As String
 Dim c As Range
 Dim RowNo As Long
 Dim ColumnNo As Integer

 '検索する文字列(実際には、セルの値?)
 TargetValue1 = "A-1"
 TargetValue2 = "B-3"
 TargetValue3 = "D-1"

 '行見出しの作業列(F列)を検索
 RowNo = 0
 With Columns(6)
  Set c = .Find(TargetValue1 & TargetValue2, LookIn:=xlValues)
  If Not c Is Nothing Then
   '見つかったら行番号を取得
   RowNo = c.Row
  End If
 End With
 
 '列見出し(1行)を検索
 ColumnNo = 0
 With Rows(1)
  Set c = .Find(TargetValue3, LookIn:=xlValues)
  If Not c Is Nothing Then
   '見つかったら列番号を取得
   ColumnNo = c.Column
  End If
 End With
 
 '行番号、列番号ともに取得できたら
 If RowNo > 0 And ColumnNo > 0 Then
  '検索結果の取得
  MsgBox TargetValue1 & " And " & _
       TargetValue2 & " And " & _
        TargetValue3 & " の検索結果は " & _
         Cells(RowNo, ColumnNo).Value
 Else
  MsgBox TargetValue1 & " And " & _
       TargetValue2 & " And " & _
        TargetValue3 & " に一致するものはありませんでした。"
 End If
End Sub

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