• 締切済み

エクセル2010 同データの検索と関連セルの表示

先の質問、 http://okwave.jp/qa/q8405162.html において、実践後の画像を再アップさせて頂きます。 まずは、S1セルに =IF(INDEX($Y:$Y,ROW())="","",INDEX($Y:$Y,ROW())&"■"&COUNTIF(INDEX($Y:$Y,1):INDEX($Y:$Y,ROW()),INDEX($Y:$Y,ROW()))) を入力後、ctrl + ENTER で確定し、オートフィルで最下部まで。 その後、すべてctrl + ENTER で 以下を貼り付けました。 B9セル =IF(INDEX($4:$4,COLUMN())="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN())),"",IF(INDEX($V:$V,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($V:$V,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) B10セル =IF(INDEX($4:$4,COLUMN())="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN())),"",IF(INDEX($Z:$Z,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($Z:$Z,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) B11セル =IF(INDEX($4:$4,COLUMN())="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN())),"",IF(INDEX($AA:$AA,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($AA:$AA,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) B12セル =IF(INDEX($4:$4,COLUMN())="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN())),"",IF(INDEX($AC:$AC,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($AC:$AC,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) C9セル =IF(INDEX($4:$4,COLUMN()-1)="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN()-1)),"",IF(COUNT(INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))),LOOKUP("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))),""))) C9セルの書式設定の表示形式を[日付]に。 C10セル =IF(ISERROR(1/(INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)<>"")),"",INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)) C11セル =IF(INDEX($4:$4,COLUMN()-1)="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN()-1)),"",IF(INDEX($AB:$AB,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($AB:$AB,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) C12セル =IF(INDEX($4:$4,COLUMN()-1)="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN()-1)),"",IF(INDEX($AD:$AD,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($AD:$AD,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) 機器Aの1回目は求める数値を抜き出して表示してくれています。 それを、コピー&ペーストで 機器Bの1回目、機器Aの2回目に貼り付けました。 これは、オートフィルでも同じ数値が帰って来ます。 それで問題点なのですが、 機器Bの1回目、E9セルには1月1日と、E10セルには空白が帰って来ています。 また機器Aの2回目も同じ場所、C13セルが1月2日と、C14セルが空白で帰って来ています。 ちなみにE9セルの数式は =IF(ISERROR(1/(INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)<>"")),"",INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)) E10セルの数式は =IF(ISERROR(1/(INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)<>"")),"",INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)) となっています。 これで問題点が明らかになるでしょうか? よろしくお願いいたします。

みんなの回答

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.6

#1で回答したものです。 私のところでは、#1でも#3でも巧くいきました。 結論としては"B4:P4"にある機器名と"Y:Y"にある機器名が、等しくならない 見た目は同じでも前後にスペースが入ったり改行コードが入ったりしていると思われます。 差し替えて、実行してもらえますか? Sub 配置換え() Dim i As Long, j As Long, k As Long Dim MaxRow As Long Dim 機器名列 As Long, 試行回数 As Long, 関連データ行 As Long Dim 機器名 As String Dim myRange As Range, FindCell As Range With Sheets("Sheet3") '実際のシート名にする MaxRow = .Cells(Rows.Count, "Y").End(xlUp).Row 'Y列で最終行取得 '半角スペースと全角スペースの削除 .Range("Y1:Y" & MaxRow).Replace What:=" ", Replacement:="", LookAt:=xlPart '**2014/1/5追加 .Range("Y1:Y" & MaxRow).Replace What:=" ", Replacement:="", LookAt:=xlPart '**2014/1/5追加 .Range("Y1:Y" & MaxRow).Replace What:=Chr(10), Replacement:="", LookAt:=xlPart '**2014/1/5追加 .Range("Y1:Y" & MaxRow).Replace What:=Chr(13), Replacement:="", LookAt:=xlPart '**2014/1/5追加 .Range(.Cells(9, "B"), .Cells(48, "Q")).ClearContents For 機器名列 = 2 To 16 Step 2 '16・機器名が左詰で最大8種ある 機器名 = Trim(.Cells(4, 機器名列).Value) '**2014/1/5変更 If 機器名 = "" Then Exit Sub '関連データの機器名列をmyRangeにセット Set myRange = .Range(.Cells(1, "Y"), .Cells(MaxRow, "Y")) For 試行回数 = 1 To 10 Set FindCell = myRange.Find(What:=機器名, After:=.Cells(MaxRow, "Y"), LookIn:=xlValue, LookAt:=xlWhole) If FindCell Is Nothing Then Exit For 関連データ行 = FindCell.Row .Cells(試行回数 * 4 + 5, 機器名列).Value = .Cells(関連データ行, "V").Value .Cells(試行回数 * 4 + 6, 機器名列).Value = .Cells(関連データ行, "Z").Value .Cells(試行回数 * 4 + 7, 機器名列).Value = .Cells(関連データ行, "AA").Value .Cells(試行回数 * 4 + 8, 機器名列).Value = .Cells(関連データ行, "AC").Value i = Int((関連データ行 - 1) / 8) * 8 '関連データデータグループ最初の行を求める .Cells(試行回数 * 4 + 5, 機器名列 + 1).Value = .Cells(i + 1, "U").Value .Cells(試行回数 * 4 + 6, 機器名列 + 1).Value = .Cells(i + 4, "U").Value .Cells(試行回数 * 4 + 7, 機器名列 + 1).Value = .Cells(関連データ行, "AB").Value .Cells(試行回数 * 4 + 8, 機器名列 + 1).Value = .Cells(関連データ行, "AD").Value If 関連データ行 + 1 > MaxRow Then Exit For Set myRange = .Range(.Cells(関連データ行 + 1, "Y"), .Cells(MaxRow, "Y")) Next 試行回数 Next 機器名列 End With End Sub

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.3・4です。 前回の投稿で間違いがありました。 >オブジェクト関数またはWithブロック変数が設定されていません の場合、コードは黄色にならないと思います。 おそらく、Object型部分のエラーだと思いNo.3のような内容にしました。 何度も失礼しました。m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.3です。 試しに↓の画像のようにデータを作ってみて、前回投稿したコードをコピー&ペーストしマクロを実行してみました。 問題なく、表示されています。 補足の >そして、マクロの実行をしましたが、【 オブジェクト関数またはWithブロック変数が設定されていません 】のエラーメッセージが出ます。 の件について・・・ エラーでマクロが途中で止まっている状態ですね。 どの行が黄色になっているでしょうか? 憶測ですが、 >Set c = Range("A4:Q4").Find(What:=Cells(k, "Y"), LookIn:=xlValues, LookAt:=xlWhole) の部分で止まっているのでは? この行でB~Q列の何列目にデータを表示するか?を取得していますので、 完全一致しないといけません。 前回の質問では4行目・Y列は「検査機器○」だったような気がしますので 8行目の項目データとY列データが同じかどうか今一度確認してみてください。 次に >そして、B8~Q8セルに各々、 ダミー の文字が出ます については 途中でマクロが止まっているためにそのような表示がでています。 アップされている画像では8行目にデータがないのでストッパー代わりに8行目に仮のデータを表示させています。 これはその列の最終行を取得し、その1行下にデータを表示させるためです。 コードでは最後に8行目データは消去するようにしています。 ※ VBAの場合、1行・1列違ったり、データが少しでも違うと全く意図しない動きになるコトがあります。 これは関数でも同じです。 具体的なエラーがこちらでは判らないので、あくまで憶測での回答になります。m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 前回投稿した者です。 前回の配列数式で大丈夫だと思いますが・・・ 今回はVBAでやってみました。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, j As Long, k As Long, c As Range Application.ScreenUpdating = False Range("B8:Q48").ClearContents Range("B8:Q8") = "ダミー" For i = 1 To Cells(Rows.Count, "V").End(xlUp).Row Step 8 For k = i To i + 7 If Cells(k, "Y") <> "" Then Set c = Range("A4:Q4").Find(What:=Cells(k, "Y"), LookIn:=xlValues, LookAt:=xlWhole) j = c.Column If Cells(Rows.Count, j).End(xlUp).Row < 48 Then With Cells(Rows.Count, j).End(xlUp).Offset(1) .Value = Cells(k, "V") .Offset(1) = Cells(k, "Z") .Offset(2) = Cells(k, "AA") .Offset(3) = Cells(k, "AC") With .Offset(, 1) .Value = Cells(i, "U") .NumberFormatLocal = "m月d日" '←日付セルの表示形式は好みで! End With .Offset(1, 1) = Cells(i + 3, "U") .Offset(2, 1) = Cells(k, "AB") .Offset(3, 1) = Cells(k, "AD") End With End If End If Next k Next i Range("B8:Q8").ClearContents Application.ScreenUpdating = True End Sub 'この行まで ※ セルに数式が入っている場合、すべて消えてしまいますので、別Sheetでマクロを試してみてください。 ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。m(_ _)m

gekikaraou
質問者

補足

再度の回答ありがとうございます。 設定したいシートのタブで右クリック コードの表示にコードを貼り付けしました。 そして、マクロの実行をしましたが、【 オブジェクト関数またはWithブロック変数が設定されていません 】のエラーメッセージが出ます。 そして、B8~Q8セルに各々、 ダミー の文字が出ます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>機器Bの1回目、E9セルには1月1日と、E10セルには空白が帰って来ています。 >また機器Aの2回目も同じ場所、C13セルが1月2日と、C14セルが空白で帰って来ています。  それらは全て、前回の御質問、 http://okwave.jp/qa/q8405162.html とは、条件が異なっている事が原因です。  前回の御質問で質問者様が提示された例おいては、U列には日付と工場名しか入力されておりませんでしたが、今回の御質問では日付の下に1とか2といった数値が入力されています。  前回の御質問に対して回答させて頂いた際に、私は > そして、8行1組のデータの中で、U列に日付や時間、数値のデータが入力されているのは1箇所のみであり、機器名として数値データとして扱う事が出来る様な名称は存在していないと考えても宜しいでしょうか? > もし、上記の条件が満たされている場合には、下記の様な方法を使う事が出来ます。 と述べた筈で、それに関しては質問者様からは何の御返答も御座いませんでしたので、御質問者様が取り組んでおられる状況においては、上記の様な条件から外れている訳ではないものとして回答させて頂いた次第なのですが、その後で状況が変わったという事なのですね?  それでしたら、C9セルとC10セルに関数を入力する際に、その関数を次の様なものに変更されると良いと思います。 【C9セルに入力する関数】 =IF(INDEX($4:$4,COLUMN()-1)="","",IF(OR(IF(ISNUMBER(B9),OR(INT(B9)<B9,B9<1),FALSE),ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN()-1))),"",IF(INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)-B9+1)="","",INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)-B9+1)))) 【C10セルに入力する関数】 =IF(INDEX($4:$4,COLUMN()-1)="","",IF(OR(IF(ISNUMBER(B9),OR(INT(B9)<B9,B9<1),FALSE),ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN()-1))),"",IF(INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)-B9+4)="","",INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)-B9+4))))  尚、上記の2つの関数は、V列には各「一括りになったデータ」毎に1から始まる連番が振られていて、尚且つ、その連番のデータがB9セルに表示されている事を前提としております。  どの様な問題に関しても同様なのですが、状況が変わって前提条件から外れてしまいますと、それまでの手法は通用しなくなります。  ですから、質問をされる際には、状況を正確に御伝え頂く様御願い致します。

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.1

VBAでの方法です。 興味なかったらスルーしてください。 '興味があれば、"VBA 実行方法" で検索してください。 '標準モジュールに貼り付けて実行してください。 Sub 配置換え() Dim i As Long, j As Long, k As Long Dim MaxRow As Long Dim 機器名列 As Long, 試行回数 As Long, 関連データ行 As Long Dim 機器名 As String Dim myRange As Range, FindCell As Range With Sheets("Sheet3") '実際のシート名にする MaxRow = .Cells(Rows.Count, "Y").End(xlUp).Row 'Y列で最終行取得 .Range(.Cells(9, "B"), .Cells(48, "Q")).ClearContents For 機器名列 = 2 To 16 Step 2 '16・機器名が左詰で最大8種ある 機器名 = .Cells(4, 機器名列).Value If 機器名 = "" Then Exit Sub '関連データの機器名列をmyRangeにセット Set myRange = .Range(.Cells(1, "Y"), .Cells(MaxRow, "Y")) For 試行回数 = 1 To 10 Set FindCell = myRange.Find(What:=機器名, After:=.Cells(MaxRow, "Y"), LookIn:=xlValue, LookAt:=xlWhole) If FindCell Is Nothing Then Exit For 関連データ行 = FindCell.Row .Cells(試行回数 * 4 + 5, 機器名列).Value = .Cells(関連データ行, "V").Value .Cells(試行回数 * 4 + 6, 機器名列).Value = .Cells(関連データ行, "Z").Value .Cells(試行回数 * 4 + 7, 機器名列).Value = .Cells(関連データ行, "AA").Value .Cells(試行回数 * 4 + 8, 機器名列).Value = .Cells(関連データ行, "AC").Value i = Int((関連データ行 - 1) / 8) * 8 '関連データデータグループ最初の行を求める .Cells(試行回数 * 4 + 5, 機器名列 + 1).Value = .Cells(i + 1, "U").Value .Cells(試行回数 * 4 + 6, 機器名列 + 1).Value = .Cells(i + 4, "U").Value .Cells(試行回数 * 4 + 7, 機器名列 + 1).Value = .Cells(関連データ行, "AB").Value .Cells(試行回数 * 4 + 8, 機器名列 + 1).Value = .Cells(関連データ行, "AD").Value If 関連データ行 + 1 > MaxRow Then Exit For Set myRange = .Range(.Cells(関連データ行 + 1, "Y"), .Cells(MaxRow, "Y")) Next 試行回数 Next 機器名列 End With End Sub

gekikaraou
質問者

補足

ご回答ありがとうございます。 えっ・・・・と、VBAは全然わからないのですが、マクロの画面を開いてすべて貼り付け、シート名と記述の中のシート名を合わせて実行したのですが、何も起こりません。 導入時に他にやることがありますか?

関連するQ&A

  • エクセル2010 同データの検索と関連セルの表示

    エクセル関数に詳しくないので教えて頂けませんか? 画像の様なデータシートがあります。 ■データの場所 U~AD列には、画像の様に10列、8行が一括りになった上書きされる貼り付けデータがあります。 ■任意に入力される場所 B4、D4、F4、H4、J4、L4、N4、P4には、検査機器などの名前が入ります。 ■やりたい事 それでB4~P4に名前が入るとY列からそれと同じものを検索し、 その関連データである行のデータを表示させたいと思います。 また試行回数は10回まで表示させ、10回を超える分のデータは無視していただいて構いませんが、Y列に同じ名称のものがなければひとつ古いデータから抜き出す形になります。 一応、誤解があってはなりませんので、 試行回数1回目の機器A, 機器B 試行回数2回目の機器Aには実際の場所をセル番号で示しました。 また、U~ADのデータは毎回貼り付けられるため、表示データもそれと同時に更新されるものが理想です。 ※ちなみにA2~S2セルは空白ですので、ここは使えます。 これを出来れば関数のみで実現したいと思います。 どなたか詳しいかた、具体的な関数などで教えて頂けませんでしょうか? よろしくお願いいたします。

  • エクセル参照リンクについて

    先日質問しました内容ですが、「KURUMITO」さんよりすばらしい解答をいただきましてありがとう ございます。 (投稿日時 - 2013-06-21 13:45:07) あと一つご指導ください。 Sheet2にはA20行から次の1週間分があります。 この場合、下のどの部分を変更してB21に張り付ければいいのかよくわからず困っています。 ご指導ください 「KURUMITO」様の前回のご指導内容 例えばシート2のA1セルには楢崎、岡などの文字が、B1セルから右横に日付が、A2セルから下方には9:00-10:30などがA19までの範囲に入力されているとしてB2セルには次の式を入力して右横方向にドラッグコピーしたのちに下方の行番号の19までドラッグコピーします。 =IF(COUNTIF(INDEX(Sheet1!$A:$BS,MATCH(INDEX($A:$A,ROUNDUP(ROW(A1)/3,0)*3-1),Sheet1!$A:$A,0)+MOD(ROW(A1)-1,3),MATCH(B$1,Sheet1!$A$2:$BS$2,0)):INDEX(Sheet1!$A:$BS,MATCH(INDEX($A:$A,ROUNDUP(ROW(A1)/3,0)*3-1),Sheet1!$A:$A,0)+MOD(ROW(A1)-1,3),MATCH(B$1,Sheet1!$A$2:$BS$2,0)+9),$A$1)=0,"",INDEX(Sheet1!$B$4:$M$4,MATCH($A$1,INDEX(Sheet1!$A:$BS,MATCH(INDEX($A:$A,ROUNDUP(ROW(A1)/3,0)*3-1),Sheet1!$A:$A,0)+MOD(ROW(A1)-1,3),MATCH(B$1,Sheet1!$A$2:$BS$2,0)):INDEX(Sheet1!$A:$BS,MATCH(INDEX($A:$A,ROUNDUP(ROW(A1)/3,0)*3-1),Sheet1!$A:$A,0)+MOD(ROW(A1)-1,3),MATCH(B$1,Sheet1!$A$2:$BS$2,0)+9),0)))

  • エクセルで求めたセルの左隣りのセルの値を返したいです

    お世話になります INDEXとMatchを使い行の一番右(左から順にセルが埋まるので右端のセルが一定では無い)の値を返すようにしました。以下です。 しかし、一番右から2番目のセルの値(求めたものの左隣り)もほしいのです。 その場合はどうしたらよいのでしょうか? =INDEX(1:1,MAX(IF(COUNT(1:1),MAX(MATCH(MAX(1:1)+1,1:1,1))),IF(COUNTIF(1:1,"*"),MATCH("",1:1,-1)))) 宜しくお願い致します。

  • excelで重複データを1つにカウントしたいが、セルが結合されている場合

    エクセルでの重複データをひとつにカウントする方法で、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1849830 式は上記の良回答より =COUNT(INDEX(1/(MATCH(A2:A100,A2:A100,0)=ROW(A1:A99)),0)) を使えばよいということはわかったのですが、 私の作っている表は、カウントしたいセルが結合してあり、うまくいきません。 具体的にはC,D,Eの結合のセルで、カウントしたい行は4行目~25行目まで。 空白のセルあり です。 =COUNT(INDEX(1/(MATCH(C4:E25,C4:E25,0)=ROW(C1:E21)),0)) としてみたのですが、 結果はすべて「0」となってしまいます。 このような場合どのようにすれば、よいかどなたか教えて下さい。

  • VBA 検索したセルに入力

    ExcelのVBAを使用して データの入力されたファイルに行列から検索したセルに数値を入力したいのです。 例えば、名前(行)と、日付(列) 2つの条件で、セルを検索し、該当するセルに、データ(数字とか)を 入力したいのです ------------------------------------  6/1 6/2 6/3 6/4 ・・・ a b c ・ ・ ------------------------------------ 例えば、A5に名前、B5に日付、データエリアがB10:Z20の場合 =INDEX(B10:Z20,MATCH(A5,A10:A20,0),MATCH(B5,B9:Z9,0)) で、該当するセルを探すことはできたのですが、 このセルに、データを入力したいときは、 ROWやCOLUMNで、行番号、列番号を取り出して Cellsで、入力すればいいのかな?と考えていますが もっと簡単にできるのでしょうか? (FIND関数は、使ったことがなく、どうなんだろう?と) それでいいよ とか、こっちの方が簡単 とかあれば、教えてください 

  • ExcelセルにVBAでINDEX関数を入力

    ExcelでINDEX関数とMATCH関数で"B11:E13"セルに以下の数式データがあります。 数式は "B11"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))) "B12"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))) "B13"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))) "C11"==IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))),"",INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))) "B15~B23"に数値1~3を入力した場合イニシャルA~I が入力される式ですが、列を連続で入力できるような処理をVBAのWorksheetFunctionで行うにはどのようにコードを記述すればよいのでしょうか。 ご回答のほどよろしくお願いします。

  • A列が1から始まる連番で、C列を合計欄として結合

    添付画像のようにA列が1から始まる連番で、C列を合計欄として結合し、結合したC列に隣り合う、B列の合計を出す場合のC列の関数を =IF(INDEX($A:$A,ROW())="","",SUM(INDEX($B:$B,ROW()):INDEX($B:$B,IF(COUNTIF(INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),"*?"),MATCH("*?",INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),0)-1+ROW(),ROWS($A:$A))))) とした場合画像の左のように合計が合いません。 画像の右のようにC列を計算するには =IF(INDEX($A:$A,ROW())="","",SUM(INDEX($B:$B,ROW()):INDEX($B:$B,IF(COUNTIF(INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),"*?"),MATCH("*?",INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),0)-1+ROW(),ROWS($A:$A))))) をどのように修正すればいいのでしょうか?

  • EXCEL、ランダム表示の発展系?

    EXCELのSheet1には A列にサイトタイトル、B列にURL、C列にカテゴリのデータがあるとします。 そして、D列には「=IF(B2="","",RAND())」このようなランダムの関数があります。 また、Sheet2のA列には =IF(ROW(A1)>COUNT(Sheet1!$D:$D),"",INDEX(Sheet1!$A:$B,MATCH(LARGE(Sheet1!$D$2:INDIRECT("Sheet1!D"&COUNT(Sheet1!$D:$D)+1),ROW(A1)),Sheet1!$D:$D,0),COLUMN(A1))) B列には =IF(ROW(B1)>COUNT(Sheet1!$D:$D),"",INDEX(Sheet1!$A:$B,MATCH(LARGE(Sheet1!$D$2:INDIRECT("Sheet1!D"&COUNT(Sheet1!$D:$D)+1),ROW(B1)),Sheet1!$D:$D,0),COLUMN(B1))) がA2,B2~A6,B6の5行に書かれています。 すると、Sheet2のA2,B2~A6,B6にはランダムに表示されます。 (以前教えてもらった方法です) そこで今回の質問ですが2つあります。 1つ目は、C列のカテゴリを指定して、その中からランダムに表示させたい。 2つ目は、同じドメインは表示しないようにしたい。 ちょっと、分かり難いかもしれませんが、このようにするにはどうすればいいでしょうか? 恐れ入りますが、教えていただけないでしょうか? よろしくお願いします。

  • 毎日の体温測定を作成していて

    いつもお世話になります。 WIN7 EXCELL2010 です。 ご指導いただきたいのは添付図の、 (1) を(2) のようにしたいのです。 例えば (1) のB6 B9のように分けないで(2)のように 以下の数式が B6 =IF(ROW(B1)>COUNTIF(記入!$B$1:$B100,">="&$C$4)-COUNTIF(記入!$B$1:$B100,">="&DATE(YEAR($C$4),MONTH($C$4)+1,1)),"",INDEX(記入!$D$1:$D100,IF(MONTH($C$4)=1,2+ROW(B1)-1,IF(COUNTIF(記入!$B$1:$B100,$C$4)>0,MATCH($C$4,記入!$B$1:$B100,0)+ROW(B1)-1,MATCH($C$4,記入!$B$1:$B100,1)+ROW(B1))))) C6  =IF(OR($B6="",COUNTIF(記入!$F$1:$F$100,C$4&$B6)=0),"",INDEX(記入!$L$1:$L$100,MATCH(C$4&$B6,記入!$F$1:$F$100,0))) 多分ですが C6 のなにかをとおもって色々試しましたがわかりませんでした。 誠に恐縮ですがご指導をよろしくお願いします。

  • エクセル、毎回2づつ増えいくデーターの式?

    よろしくお願いいたします。エクセルで別表からA2、B2に ともに145行までデーターが入っていて、C1に各当するものをA列から引っ張ってくる式が下の数式です。 【=IF(ROWS($2:2)>COUNTIF($A:$A,$C$1),"",INDEX($B:$B,SUMPRODUCT(ROW($A$2:$A$145)*($A$2:$A$145=$C$1)*(COUNTIF(OFFSET($A$2,,,ROW($A$2:$A$145)-ROW($A$2)+1),$C$1)=ROWS($2:2))))) 】 行数が一定で、中だけ数値が変化する分にはいいんですが、毎回2行分データーが増えていきますので、毎回A145の式を147に変えて、手数がかかって、なんかいい式がないもんかとのお伺いなんです。 よろしくお願いいたします。

専門家に質問してみよう