• ベストアンサー

初心者です。EXCELのマクロを作ろうとして、困っています。

初心者です。EXCELのマクロを作ろうとして、困っています。 やりたいことは、以下の通りです。 1行目には、年度並びで月が並んでいます(4月→3月)。 2行目は、空欄ですが、ここに後述のデータをコピーします。 セルA5には、コピーしたいデータが記載されています。 セルA6には、セルA5にデータを記載した「翌月の日付(YYMMDD)」が記載されています。 A6の日付を「前月」にして、2行目の該当月(前月)のセルに、セルA5のデータをコピーします。 以上のことをやりたいのですが、どの様にすれば良いか教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

プログラムを作成する上で考えなくてはならないことは どうやって目的を達成するか、その道のりを考えることです(アルゴリズムと呼びます) 以下の流れを考えました 1 A6セルの日付の1月前の月を得る 2 1行目で 同じ月の数字が何列目にあるか検索する 3 検索して得た列番号の2行目にA5セルの値を入れる 1 について Sub ボタン1_Click() Tuki = Month(Range("A6")) - 1 If Tuki = 0 Then Tuki = 12 MsgBox Tuki End Sub 2の機能を加えます Sub ボタン1_Click() Tuki = Month(Range("A6")) - 1 If Tuki = 0 Then Tuki = 12 MsgBox Tuki Retu = Rows("1:1").Find(What:=Tuki, LookAt:=xlWhole).Column MsgBox Retu End Sub 3の機能を加えます Sub ボタン1_Click() Tuki = Month(Range("A6")) - 1 If Tuki = 0 Then Tuki = 12 MsgBox Tuki Retu = Rows("1:1").Find(What:=Tuki, LookAt:=xlWhole).Column MsgBox Retu Cells(2, Retu).Value = Range("A5").Value End Sub となりました。不要なMsgBoxのコードは削除してもらってかまいません。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

回答が出ているが、どうすれば良いのか私には、良くわからない。具体例でデータを書いてください。 質問を解釈してみると A B C D  ・・列 1行目 4 5 6 7  ・・・データ=月数字 2行目 空白   <--コピーして張り付ける A5 データあり<---A列だけでなくB列など5行目全体(12ヶ月)にデータがあるのでは???<--B5以右を記述不足では? A6 <---データを記載した「翌月の日付(YYMMDD)」が記載されています。???      例えば2010/9/15 >A6の日付を「前月」にして、-->2010/8/15にするのか? >2行目の該当月(前月)のセルに、セルA5のデータをコピーします。 2行目にコピーするのか。あとだい5行目は空白にするのか。 何のためにこういうことをするのか。 前月の日付は Sub test01() For c = 1 To 1 '4月=A列だけにした Cells(6, c) = DateSerial(Year(Cells(6, c)), Month(Cells(6, c)) - 1, Day(Cells(6, c))) Next c End Sub で出せる。ただし10月31日の「前月」はどうするのかな。大の月ー>小の月の場合。

noname#192382
noname#192382
回答No.2

no 1 です。前の回答には不完全のところがありました。次のように訂正させてください。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2010/10/23 ユーザー名 : ' Dim mymonth As Integer, myretu As Integer mymonth = Month(Cells(6, 1)) If mymonth = 1 Then mymonth = 13 Else For myretu = 1 To 12 If Cells(1, myretu) = mymonth - 1 Then Cells(2, myretu) = Cells(5, 1) Else Next ' End Sub

noname#192382
noname#192382
回答No.1

次のマクロを試してみてください。 Option Explicit Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2010/10/23 ユーザー名 : ' Dim mymonth As Integer, myretu As Integer mymonth = Month(Cells(6, 1)) For myretu = 1 To 12 If Cells(1, myretu) = mymonth - 1 Then Cells(2, myretu) = Cells(5, 1) Else Next ' End Sub

関連するQ&A