ID非公開さん
2022/5/21 17:50
2回答
エクセルVBA初心者です。
エクセルVBA初心者です。 エクセルにて、以下のようなシステムを作りたいと思っています。 1 2 3 鈴木園子 ◯ 江戸川コナン 毛利蘭 ◯ 結果 :鈴木園子 毛利蘭 このように、 一列目に人の名前が何行か羅列されているとします。 一行目には、1,2,3•••と1から順番に数字が記載されており、これが今日の日にちと連動しているものとします。 この時、今日が1日だとすると、1の列に◯など、何かチェックがある時はチェックされている人の名前をどこかに書き出したいのです。 試しに色々と調べながら以下のように作ろうとはしてみたのですが、全くもって分からず動きませんでした。 ご教示のほど、よろしくお願いします。 Sub 試し() Dim i Dim j For i = 2 To Cells(1, 1).End(xlDown).Row Range (Sheets("Sheet1").Cells(i, (Val(Format(Date, "yyyymmdd")) Mod 100)),Sheets("Sheet1").Cells(i, (Val(Format(Date, "yyyymmdd")) Mod 100))) If Sheets("Sheet1").Cells(i, j) Is Not Null Then Sheets("Sheet2").Cells(1, 1).Value = Sheets("Sheet1").Cells(i, 1).Value Else Sheets("Sheet2").Cells(1, 1).Value is null Next i End Sub
Visual Basic・80閲覧
ベストアンサー
Sub Example() Const 名前の列 As String = "A" Const 日付起点 As String = "B1" Const 日付の行 As Integer = 1 Const 出力先セル As String = "G2" Dim 日 As Integer 日 = Day(Date) ' <=== 今日 Dim 日セル As Range Set 日セル = Range(日付起点, Cells(日付の行, Columns.Count).End(xlToLeft)).Find(日) If 日セル Is Nothing Then MsgBox "日が見つかりません" Exit Sub End If Dim 日列 As Range Set 日列 = Range(日セル, Cells(Rows.Count, 日セル.Column).End(xlUp)) Dim ○ As Range Set ○ = 日列.Find("○") If ○ Is Nothing Then MsgBox "○が見つかりません" Exit Sub End If Dim 最初の○の位置 As String 最初の○の位置 = ○.Address Dim ○の人達 As Collection Set ○の人達 = New Collection Do While Not ○ Is Nothing ○の人達.Add Cells(○.Row, 名前の列).Value Set ○ = 日列.FindNext(○) If ○.Address = 最初の○の位置 Then Exit Do Loop Dim i As Long, 人 For Each 人 In ○の人達 Range(出力先セル).Offset(i) = 人 i = i + 1 Next Set ○の人達 = Nothing End Sub
質問者からのお礼コメント
書いてくださったもので実行してみたら、出来ました!! 本当にありがとうございます!恩人です。これで業務がとても効率よく進むと思います。 それにしても、私が書いたプログラムは全く違うものだったのですね・・知らないものがたくさん出てきて、VBA は難しく奥が深いことを痛感しました。書いてくださったものを見ながら、また調べて勉強して精進します。本当にありがとうございました!!感動しました。
お礼日時:5/21 23:29