• 締切済み

Excel のマクロを作成したい。

Excel で作成した作業計画表(テ-ブル)に下記マクロを作成し実行したいので。 当初計画表には後述のB,C,Dは存在していない。 下記マクロにてテ-ブル内に追加したセ-ルB=開始日、C=終了日、D=作業期間を自動に求めたい。 タイトルとして 第1行目コロンA=作業者名、B=開始日、C=終了日、D=作業期間、E=2011年10月31日、 F=2011年11月7月、次のコラムから1週間後の日付が設定されている(テストとしてJまで) J=2011年12月5日 第2行Aコラムには作業者=田中さん、B,C、Dを自動で求めたい。 第3行Aコラムには作業者=鈴木さん、B,C、Dを自動で求めたい。 第4行Aコラムには作業者=林さん、B,C、Dを自動で求めたい。 Excel のテ-ブルでは 第2行A=田中さん EからFに(当初はB~G)赤色で線を塗り2週間の作業とした。 第3行Aコラムには作業者=鈴木さん、FからGに赤色で線を塗り2週間の作業、 第4行Aコラムには作業者=林さん、HからJに赤色で線を塗り3週間の作業として計画した。 田中さんの作業開始日は2011年10月31日、終了日2011年11月12日、作業期間は2週間との 結果を求めたい。 下記マクロは Sub test() i = Colum(E)     :Eコラムの番号 x = Colum(J)     :Jコラムの番号 y = EtActivitecell.Row For c = i To x Step 1 If Adresse(Row(y), Colum(c), 4) = "D" Then Adresse(EtActivitecell.Row, EtActivitecell.Colum) = ADRESS(Colum(c), 1, 4) End If Next End Sub

みんなの回答

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

え? マクロのご質問なのにマクロの動かし方が判らないのですか? 先の回答ではゴメンなさい,D列の週を記入するのを忘れてました。 手順: シートを開く ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける #さっきの回答のマクロとは違うので,間違えずにこちらで作業をしてください  さっきの回答のマクロの方は間違いなく削除しておきます Sub Macro1r1()  Dim r As Long  Dim c As Long, cc As Long  dim w as long  Dim stopC As Long  stopC = Range("IV1").End(xlToLeft).Column ’Range(Range("E1"), Cells(1, stopC)).DataSeries rowcol:=xlRows, Type:=xlDataSeriesLinear, Date:=xlDay, Trend:=True  For r = 2 To Range("A65536").End(xlUp).Row   cells(r, "B").resize(1, 3).clearcontents   w = 0   For c = 5 To stopC    If Cells(r, c).Interior.ColorIndex <> xlNone And Cells(r, c).Interior.ColorIndex <> xlAutomatic Then     Cells(r, "B") = Cells(1, c).Value     For cc = c To stopC      If Cells(r, cc).Interior.ColorIndex = xlNone Or Cells(r, cc).Interior.ColorIndex = xlAutomatic Then       Exit For      End If      w = w + 1     Next cc     Cells(r, "C") = Cells(1, cc - 1).Value     cells(r, "D") = w     Exit For    End If   Next c  Next r End Sub ファイルメニューから終了してエクセルに戻る ALT+F8を押して,登録したマクロを実行する

kaen75
質問者

お礼

keithinさん  びっくりさせて申し訳けありません。 EXCELでマクロを操作するのは初めてで、googleのサイトを調べ何回も試行錯誤を繰り返し 実行しています。 マクロ登録と実行は理論上理解したのですが、マクロのプログラムで躓く状態。 今回keithinさんが回答して頂いた中にもエラ-を発生する要因があったりで試行錯誤にて 実行しているのが実情です。フランス語環境で実行しているのもあります。 何とか今回は実行できました。本当にありがとうございます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

例示の「田中さんの終了日」がなぜ11月12日なのか。(13日ならわかるのですが。) 「セル着色で作成したガントチャートから、開始日・終了日・所要日数を求めたい」なんですかね? 不明点が多いので考え方だけ。なおOption Explicit宣言は行ったほうが良いですよ。 対象人数(3名)の処理(外側ループ)  個人別に行番号を決めて、セルE~セルJまでループ(内側ループ)   セルの着色は「赤」か判定    赤に着色されてたら、開始日の値設定状況を判定。     値未設定なら、タイトル行の日付を開始日にセット   右隣のセルの着色は「赤」か判定    赤に着色されてたら何もしない    赤で無いならタイトル行の日付+5の日付を開始日にセットしてループを抜ける。  内側ループの終わり  開始日と終了日から所要日数を求める。 外側ループの終わり。

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

E1からの1行目セル(仮にJ1まで)には,キチンと全部日付を埋めてある前提で。 Sub Macro1()  Dim r As Long  Dim c As Long, cc As Long  Dim stopC As Long  stopC = Range("IV1").End(xlToLeft).Column ’Range(Range("E1"), Cells(1, stopC)).DataSeries rowcol:=xlRows, Type:=xlDataSeriesLinear, Date:=xlDay, Trend:=True  For r = 2 To Range("A65536").End(xlUp).Row   For c = 5 To stopC    If Cells(r, c).Interior.ColorIndex <> xlNone And Cells(r, c).Interior.ColorIndex <> xlAutomatic Then     Cells(r, "B") = Cells(1, c).Value     For cc = c To stopC      If Cells(r, cc).Interior.ColorIndex = xlNone Or Cells(r, cc).Interior.ColorIndex = xlAutomatic Then       Exit For      End If     Next cc     Cells(r, "C") = Cells(1, cc - 1).Value     Exit For    End If   Next c  Next r End Sub

kaen75
質問者

お礼

早速回答頂きありがとうございます。 keithinさんが提示されたマクロをEXCEL File タイトル Test.xlsxのB1にカ-ソルを持って行き リボンの表示内マクロを選択し実行しようとしていますがスム-ズに実行できません。 Excelと関連付けてマクロ登録、実行手順をご指導願えませんか?