【Excel VBA】日付の代入

このQ&Aのポイント
  • Excel VBAを使用して、特定の条件に基づいて日付を代入する方法について教えてください。
  • 現在のExcelデータには、処理ごとに最大値とその最大値に関連する日付があります。
  • 最大値に関連する日付を特定の条件を満たすセルに代入するコードを作成していますが、うまくいきません。ご教示いただけないでしょうか。
回答を見る
  • ベストアンサー

【Excel VBA】日付の代入

現在以下の操作を行いたく、コードを作成しています。 ・20~23行で各最大値を抽出し、C列に代入する ・最大値に紐づく日付をD列に代入する ・D列の日付が入ったセルを改行し、 2行目に"(曜日)"を入力する <現在のExcelデータ詳細> A20:"処理1" A21:"処理2" A22:"処理3" A23:"処理4" B19~AF19:日付 B20~AF23:任意の数字 C31:処理1の最大値 C33:処理2の最大値 C35:処理3の最大値 C37:処理4の最大値 D31、D33、D35、D37:日付 L(曜日)を入力予定 最大値に紐づく日付をD列に代入するところで 躓いています。 ご教示いただけないでしょうか。 現在のコードは下記の通りです。 Sub 最大値の取得() Dim max As Long Dim row As Integer Dim column As Integer For row = 20 To 23 max = 0 For column = 2 To 32 If Cells(row, column).Value > max Then max = Cells(row, column).Value End If Next Cells((row - 20) * 2 + 31, 3).Value = max For i = 4 To 1 Step -4 '編集中 Cells((row - 20) * 2 + 31, 4).Value = Cells(row - i, column - 1) '編集中 Next End Sub

質問者が選んだベストアンサー

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

 回答No.1,3,4です。 >後者の文字列として表示させたいと考えています。  それでしたら .NumberFormatLocal = "m/d" & vbCrLf & "aaa" '日付の表示形式を変更する の部分は不要ですので、以下の様にして下さい。 Sub 最大値の取得_繰返し処理版2() Dim row As Integer '変数rowを宣言 Dim column As Integer '変数columnを宣言 Dim max As Long '変数maxを宣言 Dim temp As Variant '変数tempを宣言 Dim maxday As Variant '変数maxdayを宣言 With Application .ScreenUpdating = False '画面表示の更新停止 .Calculation = xlManual '計算モードを手動にする End With Range("C31:C38").ClearContents '古いデータを消去 For row = 0 To 3 '行番号のオフセット数rowが0~3の範囲で繰り返し処理を行う max = 0 'maxに0を代入する For column = 2 To 32 'columnが32まで繰り返し処理を行う temp = Cells(row + 20, column).Value 'tempに値を代入する If IsNumeric(temp) Then '値が数値の場合 If temp > max Then 'maxより大きい値の場合 max = temp 'maxに値を代入する maxday = Cells(19, column).Value End If 'If temp > max Then文の終了 End If 'If IsNumeric(temp) Then文の終了 Next column 'columnの値を増分する If max > 0 Then With Cells(row * 2 + 31, "C") .Value = max '最大値を転記する With .Offset(1) .Value = Format(maxday, "m/d" & vbCrLf & "(aaa)") '最大値に紐づく日付と曜日を表す文字列入力する .HorizontalAlignment = xlCenter '横位置中央 .VerticalAlignment = xlCenter '縦位置中央 .WrapText = True '折り返して全体を表示する .RowHeight = .RowHeight + .Font.Size * 1.5 '行の高さを調整する End With End With End If 'If max > 0 Then文の終了 Next row 'rowの値を増分する With Application .Calculation = xlAutomatic '計算モードを自動にする .ScreenUpdating = True '画面表示の更新再開 End With End Sub  或いは、 Sub 最大値の取得_改2() 'QNo.9077754 【Excel VBA】日付の代入 Dim i As Integer, c As Range, max As Long With Application .ScreenUpdating = False '画面表示の更新停止 .Calculation = xlManual '計算モードを手動にする End With Range("C31:C38").ClearContents '古いデータを消去 For i = 0 To 3 '行番号のオフセット数rowが0~3の範囲で繰り返し処理を行う With Range("B20:AF20") max = Application.WorksheetFunction.max(.Offset(i)) '最大値を求め、その求めた値を変数maxに格納 Set c = .Offset(i).Find(max, , xlValues, xlWhole) '最大値が入力されているセルがどのセルであるかを求め、そのセルを変数cに格納 End With If Not c Is Nothing Then '最大値が入力されているセルが存在しない場合以外の場合(数値が入力されているセルが存在する場合) With Range("C31").Offset(i * 2) 'C31セルを起点に変数iの値の2倍だけオフセットされたセル .Value = max '最大値を転記する With .Offset(1) .Value = Format(Cells(19, c.column).Value, "m/d" & vbCrLf & "(aaa)") '最大値に紐づく日付と曜日を表す文字列入力する .HorizontalAlignment = xlCenter '横位置中央 .VerticalAlignment = xlCenter '縦位置中央 .WrapText = True '折り返して全体を表示する .RowHeight = .RowHeight + .Font.Size * 1.5 '行の高さを調整する End With End With End If Next i With Application .Calculation = xlAutomatic '計算モードを自動にする .ScreenUpdating = True '画面表示の更新再開 End With End Sub

caa29674
質問者

お礼

遅くなりましたが、想定の動作を行うことができました。 回答いただき、ありがとうございました!

その他の回答 (5)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

お呼びじゃないみたいですが、まぁ、人が書いたマクロの質問をされるのも迷惑でしょうから。 sub macro1r1()  dim r as long  dim c as long  dim rr as long  dim res as long  with range("D31,D33,D35,D37")   .wraptext = true   .horizontalalignment = xlcenter   .numberformatlocal = "m/d" & vblf & "(aaa)"  end with    for r = 20 to 23   rr = (r - 20 ) * 2 + 31   res = 0   for c = 2 to 32    if cells(r, c).value > res then    ’更新したら転記する     res = cells(r, c).value     cells(rr, "C").value = res ’値と     cells(rr, "D").value = cells(19, c).value’日付    end if   next c  next r end sub

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

>> .NumberFormatLocal = "m/d" & vbCrLf & "aaa" '日付の表示形式を変更する > この部分を改良中です。 >セルのコピーをした際に、そのまま引っ張れるようにしたいと考えています。 >.Value = maxday & vbCrLf & "(" & Format(maxday, "aaa") & ")" '改良中  何をどうしたいと考えておられるのかをはっきりと説明して下さい。   .NumberFormatLocal = "m/d" & vbCrLf & "aaa" という箇所は、セルの書式設定の表示形式を指定している部分です。  それに対して、 .Value = maxday & vbCrLf & "(" & Format(maxday, "aaa") & ")" という箇所は、セルに入力する値を指定しているだけで、セルの書式設定の表示形式してはいないのですから、   .NumberFormatLocal = "m/d" & vbCrLf & "aaa" の部分を改良する事にはなりません。   .NumberFormatLocal = "m/d" & vbCrLf & "aaa" のままであっても、セルをコピーする際にセルの書式もコピーすれば、 11/1 月 の形式のままで引っ張れる事になりますが、それをどの様に改良したいのでしょうか?  セルに入力されているデータは日付データのままで、表示形式を使って 11/1 (月) と表示させたいのか、それともセルに入力されるデータを、Excelが日付データとして扱う事が出来ない 11/1 (月) という文字列データで入力したいのか、どちらなのでしょうか?

caa29674
質問者

補足

説明が不足しており、すみませんでした。 後者の文字列として表示させたいと考えています。

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

>すみません。現状は以下コードになりました。 >Sub macro1() (中略) >rrow = (row - 20) * 2 + 32 'rrowに行番号を代入する >For row = 20 To 23 'rowが23まで繰り返し処理を行う (中略) >Cells(rrow - 1, "C").Value = max '最大値を転記する >Cells(rrow, "C").Value = Cells(19, column).Value '最大値に紐づく日付を入力する >Cells(rrow, "C").NumberFormatLocal = "m/d" & vbCrLf & "aaa" '日付の表示形式を変更する (中略) >Next column 'columnの値を増分する >Next row 'rowの値を増分する >End Sub  色々と間違っています。  まず、 Cells(rrow, "C").Value = Cells(19, column).Value '最大値に紐づく日付を入力する Cells(rrow, "C").NumberFormatLocal = "m/d" & vbCrLf & "aaa" '日付の表示形式を変更する ではC列に日付を入力する事になりますから、 >D31、D33、D35、D37:日付 にはなりません。  それと「C31~C37に最大値を転記する」や「D31~D37に書式を設定する」を For column = 2 To 32 によって31回も繰り返すなどという無駄な事をする必要などありません。  ですから、例えどうしても For column = 2 To 32 を使った繰り返し処理によって最大値を求めたいのだとしましても、質問者様が仰った >現状は以下コード では、御質問文に書かれた通りの結果を出す事は出来ませんから、次の様にされた方が良いと思います。 Sub 最大値の取得_繰返し処理版() Dim row As Integer '変数rowを宣言 Dim column As Integer '変数columnを宣言 Dim max As Long '変数maxを宣言 Dim temp As Variant '変数tempを宣言 Dim maxday As Variant '変数maxdayを宣言 With Application .ScreenUpdating = False '画面表示の更新停止 .Calculation = xlManual '計算モードを手動にする End With Range("C31:D38").ClearContents For row = 0 To 3 '行番号のオフセット数rowが0~3の範囲で繰り返し処理を行う max = 0 'maxに0を代入する For column = 2 To 32 'columnが32まで繰り返し処理を行う temp = Cells(row + 20, column).Value 'tempに値を代入する If IsNumeric(temp) Then '値が数値の場合 If temp > max Then 'maxより大きい値の場合 max = temp 'maxに値を代入する maxday = Cells(19, column).Value End If 'If temp > max Then文の終了 End If 'If IsNumeric(temp) Then文の終了 Next column 'columnの値を増分する If max > 0 Then With Cells(row * 2 + 31, "C") .Value = max '最大値を転記する With .Offset(0, 1) .Value = maxday '最大値に紐づく日付を入力する .NumberFormatLocal = "m/d" & vbCrLf & "aaa" '日付の表示形式を変更する .HorizontalAlignment = xlCenter '横位置中央 .VerticalAlignment = xlCenter '縦位置中央 .WrapText = True '折り返して全体を表示する .RowHeight = .RowHeight + .Font.Size * 1.5 '行の高さを調整する End With End With End If 'If max > 0 Then文の終了 Next row 'rowの値を増分する With Application .Calculation = xlAutomatic '計算モードを自動にする .ScreenUpdating = True '画面表示の更新再開 End With End Sub

caa29674
質問者

補足

回答ありがとうございます。 ほぼ想定した動作になってきましたが、 恐れ入りますが、日付と曜日を表示するコードで追加質問させていただけないでしょうか。 > .NumberFormatLocal = "m/d" & vbCrLf & "aaa" '日付の表示形式を変更する この部分を改良中です。 11/1 (月) のように日付の表示形式を変更したいのですが、 どのようにすればいいでしょうか。 セルのコピーをした際に、そのまま引っ張れるようにしたいと考えています。 .Value = maxday & vbCrLf & "(" & Format(maxday, "aaa") & ")" '改良中

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

そんなにムズカシく考えず今のアイデアをそのまま延長で、単純に「max値」を更新したらその日付を取得するだけでも十分です。 sub macro1()  dim r as long  dim c as long  dim rr as long  dim res as long  for r = 20 to 23   rr = (r - 20 ) * 2 + 31   res = 0   for c = 2 to 32    if cells(r, c).value > res then    ’更新したら転記する     res = cells(r, c).value     cells(rr, "C").value = res ’値と     cells(rr, "D").value = cells(19, c).value’日付    end if   next c  next r end sub 言わずもがなですが、今の「作りたい表」では最大値が唯一であることが前提になっていますね。 またその前提によれば、わざわざマクロなど使わずとも C31: =MAX(B20:AF20) D31: =INDEX(B19:AF19,MATCH(C31,B20:AF20,0)) 以下同文 のように関数で求めるのでも十分ですが。

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

For column = 2 To 32 を使わずとも、次の様にすれば良いのではないでしょうか。 Sub 最大値の取得() Dim i As Long, c As Range, max As Long With Application .ScreenUpdating = False .Calculation = xlManual End With Range("C31:D34").ClearContents For i = 0 To 3 With Range("B20:AF20") max = Application.WorksheetFunction.max(.Offset(i)) Set c = .Offset(i).Find(max, , xlValues, xlWhole) End With If Not c Is Nothing Then Range("C31").Offset(i).Value = max Range("D31").Offset(i).Value _ = Format(Cells(19, c.Column).Value, "m月d日" & vbCrLf & "aaaa") End If Next i With Application .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub

caa29674
質問者

補足

すみません。現状は以下コードになりました。 Sub macro1() Dim row As Integer '変数rowを宣言 Dim column As Integer '変数columnを宣言 Dim rrow As Integer '変数rrowを宣言 Dim max As Long '変数maxを宣言 For row = 20 To 23 'rowが23まで繰り返し処理を行う rrow = (row - 20) * 2 + 32 'rrowに行番号を代入する max = 0 'maxに0を代入する For column = 2 To 32 'columnが32まで繰り返し処理を行う If Cells(row, column).Value > max Then 'maxより大きい値の場合 max = Cells(row, column).Value 'maxに値を代入する Cells(rrow - 1, "C").Value = max '最大値を転記する Cells(rrow, "C").Value = Cells(19, column).Value '最大値に紐づく日付を入力する Cells(rrow, "C").NumberFormatLocal = "m/d" & vbCrLf & "aaa" '日付の表示形式を変更する With Cells(rrow, "C") .HorizontalAlignment = xlRight .VerticalAlignment = xlBottom End With 'Cells(rrow, "C").Offset(-1, 0).Value = "aaa" '最大値に紐づく日付と曜日を入力する End If 'If文の終了 Next column 'columnの値を増分する Next row 'rowの値を増分する End Sub 'Cells(rrow, "C").Value = Format(Cells(19, column).Value & vbCrLf & "aaa") 'MsgBox Format(Cells(19, column).Value & vbCrLf & "aaa") 部分部分で質問させてください。 >With Cells(rrow, "C") > .HorizontalAlignment = xlRight > .VerticalAlignment = xlBottom > End With C32, C34, C36, C38に 11/1 (月) のように左詰で結果を入れたいと思っています。 どのようにすればよろしいでしょうか。

関連するQ&A

  • 【Excel VBA】データの最大値抽出

    <まず初めに> QNo.9045833 QNo.9045805 QNo.9045800 QNo.9045456 以前の質問ですが、解決しております。 この場で失礼します。 <本第> Sub 課題() Dim i As Integer Dim max(1 To 4) As Integer Dim row As Integer Dim column(1 To 31) As Variant Dim Index As Integer Dim c As Integer For row = 20 To 23 For Index = 2 To 32 For i = 1 To 4 column(Index) = change_number(Index) MsgBox "変換後の文字列は" & column(Index) & "です。" If Range(column(Index) & row) > max Then max(i) = Range(column(Index) & row) End If Next Next Next End Sub Function change_number(Index As Variant) As Variant Dim al As String If IsNumeric(Index) = True Then al = Cells(1, Index).Address(RowAbsolute:=False, ColumnAbsolute:=False) ★ change_number = Left(al, Len(al) - 1) ★ Else change_number = Range(Val & "1").column ★ End If End Function 処理1~処理4に羅列されているデータの中から、 各最大値を抽出するマクロを作成したいと考えています。 インターネット上の例を参考しつつ、コードを書きました。 実行したところ、「型が一致しません」のエラーメッセージが表示されました。 どこが誤っているか、ご教示いただけないでしょうか。 また、例から引っ張ってきましたコードですが、                ※★印つけています。 何を行っているのかいまいち落とし込めていません。 こちらも併せてご教示いただけないでしょうか。 Excelデータの詳細↓ A20:処理1 A21:処理2 A22:処理3 A23:処理4 B20~AF23:任意の数字

  • Excel VBA 列の最後の値を代入

    たびたびすみません。 指定したセルの、最終列の値を、任意のセルに入れたいのですが、 オブジェクトが必要です、というエラーがでます。 Sub 単価代入() Dim i As Integer Application.ScreenUpdating = False For i = Range("IV2").End(xlToLeft).Column To 1 Step -1 If InStr(Cells(2, i).Value, "単価") > 0 Then Cells(3, i).Value = Cells(3, i).End(xlToRight).Column.Value End If Next i Application.ScreenUpdating = True End Sub Cells(3, i).Value = のあとの指定方法がまずいのかと思いますが。。 どうぞ宜しくお願い致します。

  • VBAの得意な方、教えてください(初心者です)

    エクセルのシートが セルA1に1 セルA2に2 セルA3に3 セルA4に4 セルA5に5 という数字が入っています。 で、セルD4には"=D2*5"という数式が入っています。 セルD2にA1の数値を代入して、出てきた数値をB1に入力、 次にD2にA2の数値を代入して、出てきた数値をB2に入力…以下続く というのをVBAで書いてみたら、下のような感じになりました。 Sub test() Dim d1 As Integer Dim d2 As Integer Dim d3 As Integer Dim d4 As Integer Dim d5 As Integer Dim p1 As Integer Dim p2 As Integer Dim p3 As Integer Dim p4 As Integer Dim p5 As Integer d1 = Cells(1, 1).Value Cells(2, 4).Value = d1 p1 = Cells(4, 4).Value Cells(1, 2).Value = p1 d2 = Cells(2, 1).Value Cells(2, 4).Value = d2 p2 = Cells(4, 4).Value Cells(2, 2).Value = p2 d3 = Cells(3, 1).Value Cells(2, 4).Value = d3 p3 = Cells(4, 4).Value Cells(3, 2).Value = p3 d4 = Cells(4, 1).Value Cells(2, 4).Value = d4 p4 = Cells(4, 4).Value Cells(4, 2).Value = p4 d5 = Cells(5, 1).Value Cells(2, 4).Value = d5 p5 = Cells(4, 4).Value Cells(5, 2).Value = p5 End Sub ここで質問です。 例では5個しかないのですが、実際は100行くらいのデータなんで 大変です。もっと簡単にする方法はありますか? 実際のセルD4の数式は、他からも参照したりしているので、 ここはいじらずに教えてください。 Excel2000、Visual Basic 6.0 ってのを使っています。 よろしくお願いいたします。

  • 日付が同じなら削除

    すみません、誰か教えて頂けませんでしょうか。 A列に日付と時間が記入されているのですが、日付だけを比較して 同じなら削除したいのですが、誰かご教授頂けませんでしょうか。 A列 2013/8/14 8:00 2013/8/14 8:15 2013/8/14 10:00 2013/8/15 8:00 2013/8/16 8:00 2013/8/17 8:00 2013/8/17 20:00 2013/8/18 8:00 2013/8/18 9:00 A列 2013/8/14 8:00 2013/8/15 8:00 2013/8/16 8:00 2013/8/17 8:00 2013/8/18 8:00 Sub 削除 () Dim r As Long Dim y As Long r = Cells(Rows.Count,1).End(xlUp).Row For y = r To 1 Step -1 If Cells(y,1).Value = Cells(y,1).Offset(1,0) Then 'この比較がわかりません。 Cells(y,1).Offset(1,0).Delete(xlUp) End If Next y End Sub すみませんが、宜しくお願いします。

  • 複数の列を繋げてA列に入れたい VBA

    aaa aaa  bbb aaa  bbb  ccc aaa (A列にaaa、B列にbbb、C列にcccが入ってます) と言うデータがあるのですが 全てA列に入れて aaa aaabbb aaabbbccc aaa としたいです。 ・最終列は必ずしもCではないのです。(Dの場合もEの場合もある) ・最終行も変化します。 Sub 分かれてる列を繋げる() Dim Col As Long Dim Row As Long For Row = 1 To Range("a65536").End(xlUp).Row   For Col = 1 To Cells(Row, 256).End(xlToLeft).Column    Cells(Row, 1) = Cells(Row, 1) & Cells(Row, 2) & Cells(Row, 3)    Next Col Next Row End Sub をやってみましたが、 aaa aaabbbbbb aaabbbcccbbbcccbbbccc aaa となってしまい、 欲しい結果とは違くなってしまいます。

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

  • VBA For~Next

    こんにちは 上手く 説明できるか心配なのですが 下記のテスト1ですと 36行毎に Targetが A4,A40,A76,A112だと A1,A437,A73,A109.Value = "" Then ComboBox3.DropDownさせてから ComboBox4.DropDownさせてますが A1,A437,A73,A109にValue が入っていると A4,A40,A76,A112のCellをActiveしても ComboBox4.DropDown しません。 そこで、テスト2のように For~Nextを二つに分けました。 テスト2の方法しか無いのでしょうか? 宜しくお願いします。 Dim Row As Long 'テスト1 For Row = 4 To 112 Step 36 If Not Intersect(Target, Cells(Row, "A")) Is Nothing Then '今日の日付DropDown If Cells(Row - 3, "A").Value = "" Then form.ComboBox3.DropDown ElseIf Not Intersect(Target, Range(Cells(Row, "A"), Cells(Row + 13, "A"))) Is Nothing Then 'A列日付 form.ComboBox4.DropDown End If Next Dim Row As Long, iRow As Long 'テスト2 For Row = 4 To 112 Step 36 If Not Intersect(Target, Cells(Row, "A")) Is Nothing Then '今日の日付DropDown If Cells(Row - 3, "A").Value = "" Then form.ComboBox3.DropDown End If Next For iRow = 4 To 112 Step 36 If Not Intersect(Target, Range(Cells(iRow, "A"), Cells(iRow + 13, "A"))) Is Nothing Then 'A列日付 form.ComboBox4.DropDown End If Next

  • 完全一致したら複数のセルを順に代入するマクロは?

    エクセルのSheet1のA列にある文字列と、Sheet2にあるA列にある文字列と完全一致したら、前者のセルの右右右隣セル(一致したセルから数えて4番目のセル)から3番目までのセルに、後者のセルの右隣セル(一致したセルから数えて2番目のセル)から3番目までの文字列を順に代入するマクロをお教えください。つまり代入開始セルをSheet1のD列にしたいのです。(実は任意の列からにしたのですが…)。単純にvlookup関数を使えばいいのですが、VBAで行いたいのです。 一致したセルの右隣のセルから順に代入するマクロは以下で解決済みです。以下のマクロを編集して実行したいのですが、どこをいじったらよいかわかりません。 なお、代入したいセルを右の任意のセルまで引き延ばしたい場合、以下のコード任意Loop Until Coln1 = 4の右辺の数字を変更すればよいことまではわかっています。どうぞ、よろしくお願い申し上げます。 ---------------- Sub 試験() Dim Row1 As Integer Dim Coln1 As Integer Dim Row2 As Integer Dim Coln2 As Integer Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Coln1 = 1 Coln2 = 1 For Row1 = 1 To WS1.Cells(Rows.Count, 1).End(xlUp).Row For Row2 = 1 To WS2.Cells(Rows.Count, 1).End(xlUp).Row If WS2.Cells(Row2, 1) = WS1.Cells(Row1, 1) Then Do Coln1 = Coln1 + 1 Coln2 = Coln2 + 1 WS1.Cells(Row1, Coln1) = WS2.Cells(Row2, Coln2) Loop Until Coln1 = 4 Coln1 = 1 Coln2 = 1 End If Next Row2 Next Row1 End Sub

  • VBAで関数式を入力させて行きたい。(ループ処理)

    すみません。誰か教えて頂けませんか。 D列の3行目以下に、B列の値に2を足す関数式を記述したいと 思っています。 B列に値が入っていれば、式を入れていきたいのですが、 ループ処理で式を入れていく方法があれば、ご教授頂けませんでしょうか。 宜しくお願いします。 Last_Row = Cells(Rows.Count, 2).Row for a = 3 to Last_Row if Cells(a,2).Value <> "" then 'D列に式代入 End if Next a [D3].Formula = "=R3C2+2" [D4].Formula = "=R4C2+2" [D5].Formula = "=R5C2+2" [D6].Formula = "=R6C2+2" [D7].Formula = "=R7C2+2"

  • エクセルVBAで月別最大値を取得したい

    いつもお世話になっております。 要件がエクセルVBAで・・という事で困っています。エクセルの2010を使用しています。 今、添付画像のように、A列に日付、B列に金額が入っており、D列に月表示、E列に各月の金額MAXを入れたいのですが、どのように記述したら良いかわかりません。 調べてみたところ、月の切り替わりに空白が挿入されていれば、下記ソースで月毎のMAXが 抜けることが分かりました(D、E列への転記はわかりませんでしたが・・)。 Sub test1() Dim Rng As Range Dim c As Range Set Rng = Range(Range("B1"), Cells(Rows.Count, Range("B1").Column).End(xlUp))_ .SpecialCells(xlCellTypeConstants) For Each c In Rng.Areas c(c.Count).Offset(1).Value = WorksheetFunction.Max(c) Next End Sub データを抜きたいファイルおよび、シートが大量にあり、とりあえずsheet(1)だけでも 何とかしたいのですが、方法がわかりません。Accessならば集計クエリでグループ化、 最大値を抽出してやればいいのですが。 ご教示いただけますでしょうか。 宜しくお願い致します。

専門家に質問してみよう