Excel VBA質問箱 IV

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

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


8653 / 13646 ツリー ←次へ | 前へ→

【31830】表から値を取得する方法 じゅん 05/11/30(水) 16:58 質問[未読]
【31833】Re:表から値を取得する方法 inoue 05/11/30(水) 18:10 回答[未読]
【31843】Re:表から値を取得する方法 Kein 05/11/30(水) 20:37 発言[未読]
【31844】Re:表から値を取得する方法 huyuitibann 05/11/30(水) 20:38 回答[未読]
【31913】Re:表から値を取得する方法 じゅん 05/12/2(金) 10:13 お礼[未読]
【32041】Re:表から値を取得する方法 じゅん 05/12/5(月) 11:44 回答[未読]

【31830】表から値を取得する方法
質問  じゅん  - 05/11/30(水) 16:58 -

引用なし
パスワード
   お世話になります。
じゅんと申します。

下記のような表から値を取得するには、
どうしたらよいでしょうか?

 種類 | 種別 | 性別 | 値
------------------------------
    | 成人 | 男 | 8
    |     | 女 | 7
 人間 ----------------------
    |未成年| 男 | 6
    |    | 女 | 5
------------------------------
    | 肉食 | オス | 4
    |     | メス | 3
 動物 ----------------------
    | 草食 | オス | 2
    | メス  | メス | 1
------------------------------

前提条件:
 種類・種別・性別は、予めユーザの入力により
 分かっております。

取得結果:
 値とアドレスを取得したい。

例えば、「人間」「成人」「女」であるなら、
7という値を取得したいと思っております。

Excel関数で出来る事だとは思うのですが、
どうしても分からなかったため、質問させて頂きました。
VBA質問箱であるにも関わらず、すみません。

どうぞ、よろしくお願い致します。

【31833】Re:表から値を取得する方法
回答  inoue E-MAILWEB  - 05/11/30(水) 18:10 -

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

このような表では、関数にしろ、マクロにしろ、
表の構造がデータとして物を見るようになっていません。
罫線で囲ってあったとしても、それは「見かけ」でしかありません。

>例えば、「人間」「成人」「女」であるなら、
>7という値を取得したいと思っております。
「7」の値の行には「女」はありますが、
「人間」「成人」がないので探す仕掛けにヒットしないのです。

最低でも白文字にして、種類や種別のブランクの所に
値を入れておけば、SUMPRODUCT関数か何かで計算できるでしょう。

【31843】Re:表から値を取得する方法
発言  Kein  - 05/11/30(水) 20:37 -

引用なし
パスワード
   その表を見ると、それだけで完結した表のように見えるけど、UPされた部分以外にも
データがありますか ? あるなら全てを書き出してください。場合によっては
Match関数とFindメソッドの組み合わせぐらいで、出来るかも知れません。可能な場合
シート上またはユーザーフォームに、コンボボックスを2つとボタンを1個配置して
処理する形を想定しています。

【31844】Re:表から値を取得する方法
回答  huyuitibann  - 05/11/30(水) 20:38 -

引用なし
パスワード
   ▼じゅん さん:

一番単純な方法は「オートフィルター」です。
項目行を順次フィルターソート
すると出来ます。
エクセルの⇒データ⇒フィルターでしてください。
ただ「人間」の行は4行とも「人間」と入れてください。
成人は2行埋めるなど、以下のように表を完成させて…実行してください。

A列で「人間」B列で「成人」C列で「男」とフィルターをかけると
「8」が得られます。
これをマクロに反映させても良いでしょう。

> 種類   | 種別 | 性別 | 値
>------------------------------
> 人間   | 成人 | 男 | 8
> 人間   | 成人 | 女 | 7
> ----------------------
> 人間   |未成年| 男 | 6
> 人間   |未成年| 女 | 5
>------------------------------
> 動物   | 肉食 | オス | 4
> 動物   | 肉食 | メス | 3
>  ----------------------
> 動物   | 草食 | オス | 2
> 動物   | 草食 | メス | 1
>------------------------------
>

【31913】Re:表から値を取得する方法
お礼  じゅん  - 05/12/2(金) 10:13 -

引用なし
パスワード
   じゅんです。
お世話になります。

inoueさん
Keinさん
huyuitibannさん
どうもありがとうございます。

現在、試行錯誤しながらマクロを作成中です。
考え方は次の感じです。
1.「種類」から選んでもらい、その行の初めと終わりを取得。
2.「種別」を選んでもらい、その行の初めと終わりを取得。
3.「性別」を選んでもらい、その行を取得。
4.3.で取得した行から、「値」の値とアドレスを取得。

まさに、huyuitibannさんがおっしゃって下さった
考え方だと思います。
マクロが完成してからお礼をしようと思ったのですが、
他の業務もあり、これだけに時間が取れず、もう少しかかって
しまいそうなので、お礼だけ申させていただきます。

お礼が遅くなったこと、お詫び致します。

【32041】Re:表から値を取得する方法
回答  じゅん  - 05/12/5(月) 11:44 -

引用なし
パスワード
   じゅんです。
お世話になります。

前回、書かせていただきました、
>1.「種類」から選んでもらい、その行の初めと終わりを取得。
>2.「種別」を選んでもらい、その行の初めと終わりを取得。
>3.「性別」を選んでもらい、その行を取得。
>4.3.で取得した行から、「値」の値とアドレスを取得。
を基準にコードが完成しましたので、記載致します。
本当にそのままでして、また初心者丸出しのコードですが、
どうぞご勘弁下さい。

Private Sub Result_Click()
  Dim Key1   As String
  Dim Key2   As String
  Dim Key3   As String
  Dim Result  As String
  
  Dim StartRow  As Integer
  Dim EndRow   As Integer
  Dim i      As Integer
  
  'キーワードを取得
  Key1 = Range("G4").Text
  Key2 = Range("H4").Text
  Key3 = Range("I4").Text
  
  '表全体の開始行/終了行を取得
  Range("B3").CurrentRegion.Select
  StartRow = Selection.Item(1).Row
  EndRow = Selection.Item(Selection.Count).Row
  
  'キーワード1(種類)から範囲指定
  For i = StartRow To EndRow
    If Cells(i, "B").Text = Key1 Then
      Cells(i, "B").Select
      StartRow = Selection.Item(1).Row
      EndRow = Selection.Item(Selection.Count).Row
      Exit For
    End If
  Next i
  
  'キーワード2(種別)から範囲指定
  For i = StartRow To EndRow
    If Cells(i, "C").Text = Key2 Then
      Cells(i, "C").Select
      StartRow = Selection.Item(1).Row
      EndRow = Selection.Item(Selection.Count).Row
      Exit For
    End If
  Next i
  
  'キーワード3(性別)から範囲指定
  For i = StartRow To EndRow
    If Cells(i, "D").Text = Key3 Then
      Cells(i, "D").Select
      StartRow = Selection.Item(1).Row
      EndRow = Selection.Item(Selection.Count).Row
      Exit For
    End If
  Next i
  
  '値を取得
  Result = Cells(StartRow, "E").Text
  Range("G7").Value = Result
  
End Sub

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