- ベストアンサー
検索結果を表示させるには??発展させて
- この質問では、Excelのシート1とシート2を連携させて検索結果を表示させたいという要望があります。
- 具体的には、シート1で結合されたセルを簡素化して表示し、シート2でも同じように結合されたセルを反映させたいです。
- どのような関数式を使用すれば良いか、アドバイスをいただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 Sub Test() Dim rw1 As Integer, rw2 As Integer, rw3 As Integer, rww As Integer Dim clm As Integer km = Array("名前", "術眼", "術式", "日帰り??", "主治医", "部屋番号") If Sheets("Sheet2").Cells(1, 1) = "" Then ret = MsgBox("Sheet2のA1セルに月日が入っていません。" & Chr(13) & "処理を中止します。", vbOKOnly + vbExclamation, "警告") Exit Sub End If Sheets("Sheet2").Range("A2:F65536").ClearContents For clm = 1 To 6 Sheets("Sheet2").Cells(2, clm).Value = km(clm - 1) Next clm rw3 = 2 For rw1 = 2 To Sheets("Sheet1").Range("C65536").End(xlUp).Row If Sheets("Sheet1").Cells(rw1, 3) = Sheets("Sheet2").Cells(1, 1) Then For rw2 = rw1 To 2 Step -1 If Sheets("Sheet1").Cells(rw2, 1) <> "" Then rw3 = rw3 + 1 Sheets("Sheet2").Cells(rw3, 1).Value = Sheets("Sheet1").Cells(rw2, 2) For clm = 2 To 6 If clm <= 3 Then rww = rw1 Else rww = rw2 End If Sheets("Sheet2").Cells(rw3, clm).Value = Sheets("Sheet1").Cells(rww, clm + 2) Next clm Exit For End If Next rw2 End If Next rw1 ret = MsgBox("終了しました", vbOKOnly) End Sub でいかがでしょう!!
その他の回答 (2)
- pc_knight
- ベストアンサー率66% (52/78)
ご要望のようなことを行おうとすると関数では対応できないように思います。 ご要望の資料を自動的に作るようにするのは、プログラミングの世界です ご要望の資料を瞬時に作れるものを作りました。(末尾に記載) 簡単ですから、お試しください!!。 (1)先ず、末尾に記載のVBAをVisualBasicの標準モジュールに貼りつけてます。 (2)あとは、資料を作りたい都度、”Alt”キーと”F8”キーを押しマクロ”Test”を選択”実行”をクリックすれば瞬時に作成できます。 ※(2)の操作の別方法として、Sheet1にボタンを配置して、これをクリツクする方法もあり、操作性の良いこれがおすすめ。(ボタンの作成法:ツール(T)を右クリツク→ボタンを選択→ボタン描画→マクロ名"Test"を登録) ☆標準モジュールへの貼り付け方 AltキーとF11キーを同時に押し挿入(I)標準モジュールを選択することでModule1が用意されます。ここに貼り付けをします。 ☆VBA Sub Test() Dim rw1 As Integer, rw2 As Integer, rw3 As Integer, rww As Integer Dim clm As Integer km = Array("名前", "術眼", "術式", "日帰り??", "主治医", "部屋番号") Sheets("Sheet2").Cells.ClearContents Sheets("Sheet2").Range("A1").FormulaR1C1 = "=TODAY()+7" For clm = 1 To 6 Sheets("Sheet2").Cells(2, clm).Value = km(clm - 1) Next clm rw3 = 2 For rw1 = 2 To Sheets("Sheet1").Range("C65536").End(xlUp).Row If Sheets("Sheet1").Cells(rw1, 3) = Sheets("Sheet2").Cells(1, 1) Then For rw2 = rw1 To 2 Step -1 If Sheets("Sheet1").Cells(rw2, 1) <> "" Then rw3 = rw3 + 1 Sheets("Sheet2").Cells(rw3, 1).Value = Sheets("Sheet1").Cells(rw2, 2) For clm = 2 To 6 If clm <= 3 Then rww = rw1 Else rww = rw2 End If Sheets("Sheet2").Cells(rw3, clm).Value = Sheets("Sheet1").Cells(rww, clm + 2) Next clm Exit For End If Next rw2 End If Next rw1 ret = MsgBox("終了しました", vbOKOnly) End Sub
お礼
早速のお返事ありがとうございます 早速試してみました。感激です。簡単に瞬時にできました。 もう一つお願いがあるのですが、TODAY()+7なのですが Sheet2のA1には入力規則のリストで、一か月分の日にちを入れてます。 入力規則で選択した日にちを入れたあと、testボタンを押したら、その日のデータが出る感じにしたいのですがどうでしょうか?? よろしくお願いします!
- maron--5
- ベストアンサー率36% (321/877)
>Sheet1で簡素化してセルを結合して表示しても ◆例えば「B2とB3を結合する」とB2にはデータがありますが、B3にはデータがありません ◆データが無いものを検索しようとすると、大変難しくなります ◆1つのデータを一行に入力するのがデータベースの基本です ◆セルを結合せず入力されるのであれば、方法はありそうですが
お礼
早速のお返事ありがとうございました。 やってみましたが、出来ました。すばらしいですね。 実際に使って運用してみます。ありがとうございました 今後も自分はVBA全く分からないので、勉強してみますが、何か分からないことあったら、ご教授お願いします