http://oshiete1.goo.ne.jp/qa3081314.html
これでも十分仕上がったのですが、さらに発展をさせて使用したいのです
例
sheet1で
A B C D E F G H
1入院日 氏名 術日 術眼 術式 日帰り? 主治医 部屋番号
26/1 佐藤 6/2 右 ○○ 入院 高橋 201
3 6/3 左 △△
46/2 川端 6/2 右 ×× 入院 松橋 202
5 6/3 左 ×○
※A2とA3、B2とB3、F2とF3、G2とG3、H2とH3はセルが結合している
A4とA5、B4とB5、F4とF5、G4とG5、H4とH5はセルが結合している
このような大元がありまして
sheet2に
術日に応じて、名前・術眼・術式・日帰り等をオートフィルタではなく
関数でズラッと出せるようにしたいのですが、どうすれば良いのでしょうか
??
A B C D E F G
16/3として
2名前 術眼 術式 日帰り?? 主治医 部屋番号
3佐藤 左 △△ 入院 高橋 201
4川端 左 ×○ 入院 松橋 202
このように、Sheet1で簡素化してセルを結合して表示しても、
sheet2ではセル結合してもしっかり反映して、検索結果を表示させたいのですが、どのような関数式を用いればよろしいでしょうか??
よろしくお願いします
No.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
でいかがでしょう!!
早速のお返事ありがとうございました。
やってみましたが、出来ました。すばらしいですね。
実際に使って運用してみます。ありがとうございました
今後も自分はVBA全く分からないので、勉強してみますが、何か分からないことあったら、ご教授お願いします
No.2
- 回答日時:
ご要望のようなことを行おうとすると関数では対応できないように思います。
ご要望の資料を自動的に作るようにするのは、プログラミングの世界です
ご要望の資料を瞬時に作れるものを作りました。(末尾に記載)
簡単ですから、お試しください!!。
(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ボタンを押したら、その日のデータが出る感じにしたいのですがどうでしょうか??
よろしくお願いします!
No.1
- 回答日時:
>Sheet1で簡素化してセルを結合して表示しても
◆例えば「B2とB3を結合する」とB2にはデータがありますが、B3にはデータがありません
◆データが無いものを検索しようとすると、大変難しくなります
◆1つのデータを一行に入力するのがデータベースの基本です
◆セルを結合せず入力されるのであれば、方法はありそうですが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) エクセル関数のXlookupのフィルハンドル機能(類した機能でも可)を知りたいです。 3 2022/09/20 20:02
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 17:07
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) WORKDAY関数 4 2023/06/08 13:23
- メガネ・コンタクト・視力矯正 15年前に眼科を受診したところ、両目円錐角膜と診断されました 何度かコンタクトを無くしてしまったり、 4 2022/03/26 06:16
- Excel(エクセル) Excelで、別シートへ情報を参照表示する関数について。 2 2023/06/26 09:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
セルは大きくさせず、中の文字...
-
Excelでcsvやtxtで保存する時に...
-
マウスポインターが白十字のまま
-
エクセルファイルに _x000D_ と...
-
エクセルでセルを上下に結合し...
-
エクセルの入力規則プルダウン...
-
エクセルのIF関数で、文字が...
-
エクセルの2つのセルを内容も消...
-
エクセルで特定の列のセルだけ...
-
エクセルの白黒の反転で困って...
-
エクセルのセル外改行は可能で...
-
全セルの末尾に改行(Alt+Enter...
-
エクセルで1つのセルにスクロ...
-
エクセルで画像を透過させて画...
-
エクセルで縦書き時に右側に改...
-
セルを結合しても、文字をセル...
-
Excel入力で勝手にエンター押さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
マウスポインターが白十字のまま
-
セルは大きくさせず、中の文字...
-
エクセルで画像を透過させて画...
-
Excelでcsvやtxtで保存する時に...
-
エクセルファイルに _x000D_ と...
-
エクセルで1つのセルにスクロ...
-
エクセルの白黒の反転で困って...
-
エクセルでセルを上下に結合し...
-
エクセルで特定の列のセルだけ...
-
セルを結合しても、文字をセル...
-
エクセルの2つのセルを内容も消...
-
エクセル2013で英単語を折り返...
-
エクセルの入力規則プルダウン...
-
エクセルで右隣のセルより優先...
-
エクセル 折り返して全体を表...
-
VBA:結合されたセルに対する「...
-
エクセルのIF関数で、文字が...
おすすめ情報