[[20051123143517]] 『別シートから条件を付けたセルデータを持ってくる』(tyun) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別シートから条件を付けたセルデータを持ってくる』(tyun)
別シートからセルデータ持ってくるには(A1はシート名、D3はシート名のセル番号)
=INDIRECT(A1&"!D3")で解決ですが、これに条件を付けたセルデータを持ってくる方法を
教えてください。例えば1〜10まで設定して、指定された数字のセルデータを持ってくるようにしたいにです。


 B1に 3と入力されている場合に D3を指定するという意味なら、
 =INDIRECT(A1&"!D"&B1) です。
(純丸)(o^-')b はずしてそう、、

純丸さん、ありがとうございます。B1に入っている数字と別シートの列番号とは違います。B1に入っている数字は日付けで、別シートには1日あたり5行使い、一ヶ月分のデータ入力されています。この一ヶ月分から、B1のあるシート5行にB1で指定した数字に該当する行のデータを持ってきたいのです。
(tyun)
追伸 別シートに入っている表です。A列20〜23行までセルが統合されています。
   B列も20,21と22,23列が統合されています。C列の東、西も統合され   ています。A列は日付の数字です。A,Bの条件でDを持ってきたいのです。
   
   A  B  C  D  E  
20 1  い  東
21 1  い  東
22 1 ろ  西
23 1 ろ  西
24 
25 

 >A,Bの条件でDを持ってきたいのです。
 どういった条件かがいまいちわかりません。。。

 具体例を上げていただくとレスがつくかもしれませんよ〜♪

 Sheet1 の A1 に「○○」
         B1 に「□□」
 Sheet2 の別表が下記
   A  B  C  D  E  
20 1  い  東
21 1  い  東
22 1 ろ  西
23 1 ろ  西
24 
25 

 何処のセルに「△△」を出したい。など

 (キリキ)(〃⌒o⌒)b

お世話になります。Sheet1に下記のような表があります。このSheet1のD5に「1」と「い」の条件のSheet2の「東」を持ってきたいのです。分かりにくくてすいません。
(tyun)

   A  B  C  D  E  
1  1
2  3  い  
3  5  ろ  
4  7 は  
5  2 に  

6


 衝突しました。上の表なら簡単ですが、Sheet2の別表はセルが
 結合されているのですよね。そうなると話は簡単じゃないですよ。
 私がイメージしたのは、A20:A23、B20:B21、B22:B23、D20:D21、D22:D23は
 結合されていて(統合は間違いですよね)、同じようなデータが下方に
 並んでいる。その中で、A列が「1」でB列が「ろ」だったら「西」を
 返す数式がほしいということです。これは難しいです。
 なぜなら、A20:A23が結合されていると、数式で条件を拾おうとした時に、
 A21〜A23は 1とはならないからです。結合セルのない、すぐ上の表とは
 条件が違うのです。別の方法を考えてみますが、今はちょっと時間が
 ないので後になります。
 はずしてたらすみません。
(純丸)(o^-')b ※キリキさん、イメージ出来た?

 衝突!

 純丸さん、お帰り〜♪
 イメージは、できてきました!
 ただ、まだ条件が見えてきません・・・
 なぜ、
 >このSheet1のD5に「1」と「い」
 なのでしょう?
 Sheet1 の A1 と B2 の事に思えますが。。。なぜ?

 >A列20〜23行までセルが統合されています。
 純丸さんと被っちゃいますが、統合ですか?結合ですか?
 結合だとすると、Sheet2 の該当場所を探すのが難しそうです。。。
 結合に規則性があれば何とか出来るかもしれませんが、、、
 マクロでなら対応できそうですが、今日・明日はチョット時間が無くて
 書込みできそうにありません。。。

 他の方の回答を一緒に待ってみましょう〜♪

 (キリキ)(〃⌒o⌒)b

純丸さん、キリキさん、質問方法が悪く申し訳ありません。もい一度整理して質問します。
前質問で統合とありましたが、結合の間違いですね。
Sheet1のC1には日付(1〜31)、A2には東か西を入力するようになっています。
Sheet1のC1に1、A2に東が入力されていると、Sheet2のC1(い)をSheet1のD2に持ってくるようにしたいのです。同じようにSheet1のC1が2、A2が西だったらD2にSheet2のC4(に)をもってくるようにしたいのです。よろしくお願いします。
(tyun)

     Sheet2
  A B C D E          
1 1  東 い              
2 1  西 ろ
3 2  東 は
4 2  西 に
5 3  東 ほ
6 3  西 へ

     Sheet1
  A B C D E
1 年 月 日
2 東       い
3
4
5

 方法の1つとしてこんなんどうでっか?
 1)Alt+F11でVBEを開く
 2)「挿入」→「標準モジュール」を選択
 3)下のコードをコピペ
 4)エクセルに戻る

 使い方は関数と全く同じです、はい。
 上の例で申しますと、Sheet1のD1に=tyun(a2,c1)と書き込みます。またコピーして
使うばやいはc$1としとけばよろしいかと・・・。
      (弥太郎)
 '------------------------------
 Function tyun(data As Range, data1 As Range)
    Dim flag As Boolean
    Dim i As Long, maxrow As Long, n As Long

    With Sheets("Sheet2")
        maxrow = .Range("a" & Excel.Rows.Count).End(xlUp).Row
        For i = 1 To maxrow
            If .Cells(i, 1) = data1 Then
                For n = i To maxrow
                    If .Cells(i, 2) = data Then
                        tyun = .Cells(i, 3)
                        flag = True
                        Exit For
                    End If
                Next n
            End If
            If flag Then Exit For
        Next i
    End With
 End Function

弥太郎さん、純丸さん、キリキさん、ありがとうございます。大変難しい事をお願いしているみたいですね。上記方法で東はもってきましたが、西を入れると0が表示されました。他に6Sheetから持ってくる事を考えていますので大変な作業になりそうです。もう一度最初に戻り、結合個数の違うセルを無くします。つまり、東と西の集計表を別々に作りたいと思います。
次の表から、Sheet1、C1の日付を変えるとSheet1、D2に、Sheet2のD列を持ってくるようにしたいのです。即ち、Sheet1のC1が「1」だったら「い」を「2」だったら「ろ」を持ってくるようにしたいのです。方法がありましたら教えて下さい。
(tyun)

     Sheet2
    A B C D E          
10  1     い              
11  2     ろ
12  3     は
13  4     に
14  5     ほ
15  6     へ

     Sheet1
  A B C D E
1 年 月 日
2         い
3
4
5

 西を選択したら0?
 有りえん事ですが・・・
 結合とかなんとか書いてらっしゃるとこみたら、Sheet2のデータ範囲に結合セルが
 あるっちゅうことでっか?
 それやと正確にデータを拾う事はでけまへんワ。
 従って私のんは没でんなぁ。
    (弥太郎)

      Sheet1            Sheet2
  A B C D E       A B C D E   
1 年 月 日         10  1     い     
2         い       11  2     ろ
3                  12  3     は
4                  13  4     に
5                  14  5     ほ
                   15  6     へ

 この表だけなら、VLOOKUPでできそうです。
 D2に =VLOOKUP(C1,Sheet2!A10:C15,3,FALSE) 
 で、前の表も結合解いていいんであれば、こんなのも。
      Sheet2
  A B C D E          
1 1  東 い         ※A1,A2、A3,A4…の結合を解いて、各セルに入力されているとして    
2 1  西 ろ
3 2  東 は
4 2  西 に
5 3  東 ほ
6 3  西 へ

     Sheet1
  A B C D E
1 年 月 日
2 東       い
3

 D2に、=INDEX(Sheet2!C1:C6,SUMPRODUCT((Sheet2!A1:A6=C1)*(Sheet2!B1:B6=A2)*(ROW(A1:A6))))
 (かなれっと) 

弥太郎、ありがとうございます。VLOOKUPで概ね目的を達しているのですが、C列に文章を入れ行として使いたいので、どうしても結合したくないのです。もう1度、下記の表から、Sheet1のC1に「1」を入力するとSheet2のC10(い)C11(ろ)C12(は)をSheet1のD2、D3、D4に持ってくる。「2」を入力すると、C13(に)C14(ほ)C15(へ)を持ってくるようにしたいのです。

追伸
・A10〜A12は結合している。
・Sheet2と同じSheetが他に6つある。
よろしくお願いします。
(tyun)

    Sheet1
   A B C D E
1  年 月 1
2          い
3           ろ
4           は
5

     Sheet2
    A B C D E          
10  1     い              
11  1     ろ
12  1     は
13  2     に
14  2     ほ
15  2     へ


 日付の結合は解かないってことですね。
 >Sheet2と同じSheetが他に6つある。 というのはどういうことでしょう?
 今言われているのは、Sheet1のC1に日付を入れたら〜、ということでしたが。
 実はSheet1のB1に月、C1に日を入れたら、Sheet2からだけではなく、Sheet3〜7からも対応する月日の
 データを引っ張ってくる、ということなんでしょうか?('-'; 
 とりあえず、すぐ上の(tyun)さんの例から。
 Sheet1のD2に =INDEX(Sheet2!$C$10:$C$15,MATCH($C$1,Sheet2!$A$10:$A$15)+ROW(A1)-1)
 D3、D4にコピー。でいかがでしょう。(かなれっと)

(かなれっと)さん、解決しました。ありがとうございました。
この質問に長い間お付き合いしていただいた皆さん、本当にありがとうございました。
改めて、エクセルの素晴らしさに感動し好きになりました・・・皆さんに教えていただくと言う条件付ですが・・!?!! ヽ(^o^)ノ。
(tyun)

 ちょっとtyunさん、>条件付ですが・・!?!! 
 この2番目の?はまさか私の事やおまへんわなぁ。(笑
       (弥太郎)


弥太郎さん、おはようございます。「!?!!」にはまったく意味がありません。私の頭の中が「★!?○!☆??●☆」状態と言うことです。再会できたついでにと言うとまた誤解を受けそうですが、もう1つ教えていただきたいことがあります。
C1=
C2〜C4に1つでも入力されていたら空白にして、C2〜C4が何も入力されていなかったら、指定した文字を入れる方法があったら教えてください。
(tyun)

  A B C
1
2     ●
3         ○
4     ▲
5

 >C1=C2〜C4に1つでも入力されていたら空白にして、
 >C2〜C4が何も入力されていなかったら、指定した文字を入れる方法があったら教えてください。
 何処に指定した文字が入るのでしょう?
 別セルであれば、関数で出来そうですね〜

 =IF(COUNTIF(C2:C4,B1),"",B1)

 同じセル内(C1)であれば、マクロになります。
 シートモジュールへ
'-------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim data As Variant
If Target.Count <> 1 Then: Exit Sub
If Target.Address <> "$C$1" Then: Exit Sub
Set data = Range("C2:C4").Find(what:=Target)
Application.EnableEvents = False
If Not data Is Nothing Then
    Target = ""
End If
Application.EnableEvents = True
End Sub

 #読み直したら、何か違ってるかも・・・
 (キリキ)(〃⌒o⌒)b

キリキさん、いつもありがとうございます。いつも何を聞きたいのかが説明が悪くうまく伝わりません。

表のC2〜C4には他のSheetから文字を引っ張ってくるようになっています。何も引っ張ってきていない(空白)の場合、C1に「順調」と表示されるようにしたいのです。マクロを使うことになるのでしょうか。
(tyun)


 こう言う事でしょうか?

 C1 =IF(COUNTA(C2:C4)=0,"順調","不調")

 (キリキ)(〃⌒o⌒)b

 >C2〜C4には他のSheetから文字を引っ張ってくる
 ということは、C2からC4には何か数式が入っているのでしょうか?
 それだとこんなのはどうでしょう?
 C1に =IF(OR(C2<>"",C3<>"",C4<>""),"","順調")
  (かなれっと)

(キリキ)さん、(かなれっと)さん、ありがとうございました。どちらの式でも解決しました。色んな方法があるのですね。感心しました。
(tyun)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.