• 締切済み

エクセルのマクロでプログラムを作りたいのですが教えてください

まず一行目に48列のデータがあり、 2行目から32行目までにも同様に48列のデータがあります。 条件が1800以上の数値ならその列の1行めのデータを50行目に縦一列にどんどん出力させるというプログラムをつくりたいのです。 条件が偽の場合は空欄です。 下に途中まで努力したのですがどこをなおせばいいのかわかりません。 分かるかたいましたらご指摘お願いいたします。 Sub Macro1() Dim n As Integer For n = 1 To 31 Sheet1.Cells(n + 1, 50) = "=IF(Cells(n+1, 1)> 1800,A1,"""")" Sheet1.Cells(n + 31 * 1 + 1, 50) = "=IF(Cells(n+1, 2)> 1800,B1,"""")" Sheet1.Cells(n + 31 * 2 + 1, 50) = "=IF(Cells(n+1, 3)> 1800,C1,"""")" ・ ・ ・ ・ ・ Sheet1.Cells(n + 31 * 47 + 1, 50) = "=IF(Cells(n+1,48)> 1800,AV1,"""")" Next End Sub 宜しくお願い致します。

みんなの回答

  • loop_dog
  • ベストアンサー率32% (14/43)
回答No.2

同じ50行目ばかりに結果を書いていたら、 どこの行列の値か分からなくなると思います。 よって、50行目以降(←これ大事)に、結果を出力します。 とりあえず、自作サンプル。 (簡単には試したので、大丈夫かと) '結果用行 Dim ret_row As Integer ret_row = 50 '行 For i = 1 To 2 '列 For j = 1 To 4 If Cells(i, j).Value >= 1800 Then Cells(ret_row, j).Value = Cells(i, j).Value End If Next ret_row = ret_row + 1 Next

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>縦一列にどんどん出力させるというプログラムをつくりたいのです。 プログラムではセルに「式」を埋め込んでいるだけのようですが・・・。 プログラムで書き出す場合は、このようなことはしませんよ。 質問文からは具体的な条件や動作が理解できないので、質問に関しての回答はしませんが、式(ワークシート関数)では Cells(n+1, 2) は使えないので、セルアドレスがセットできるように変換しなくては行けません。 "=IF(" & Cells(n+1,48).address & "> 1800,AV1,"""")" ご希望の事が式でできるなら、フィルなどでコピーする方が悩まなくてよいでしょうね。

関連するQ&A

  • excel マクロ

    EXCELでデータが100行の表があるとする。 データのない行を削除し行を詰めるマクロは? イメージはこんな感じとおもうのでうが Sub Macro1() 'if文であるn行がデータがないかどうか判定YESなら Rows("n:n").Select Selection.Delete Shift:=xlUp End Sub

  • excelのマクロで2007だとエラーが。

    excel2003では動いていたマクロが2007では、エラーになってしまいます。 中断→デバッグ→再開→中断→デバッグ→再開、、、、 と中断しながらも10~20行ずつ進みます。 解決法がありましたら教えてください。 ※デバッグで確認すると「end if」で中断します。 Sub 仕分() Dim n As Long Dim nRow As Long Worksheets("シート名").Activate nRow = Range("A1").End(xlDown).Row For n = 2 To nRow If Cells(n, 6) = "条件1" Then Cells(n, 22) = "仕分け" ElseIf Cells(n, 6) = "条件2" Then Cells(n, 22) = "仕分けしない" ElseIf Cells(n, 6) = "条件1" And Cells(n, 7) = "条件2" Then Cells(n, 22) = "仕分け2" Else Cells(n, 22) = "OK" End If Next n End Sub

  • 二つのマクロで一気に処理したい

    以下のようなことができるのかお伺い致します。よろしくお願い致します。  やりたいこと   ※ 前提として、sheet1にすでにA列に通し番号で奇数の数字が入っている。    1.sheet1からsheet2へコピペーストする。しかし、A列からO列のすべてにデータがあった場合のみコピー貼り付けさせたい。     (前提で示したように、A列に通し番号で奇数の数字が入っていて、A列のみ数字があり、以外が空欄の行があるため)    2.下記のコピー貼り付けのコードと重複削除のコードを合体させて、一つの処理で動かしたい。 Sub コピー貼り付けつけ()  'コピー貼り付けつけのコード Dim lastRow As Long 'Sheet1のA3から最終行までをコピー With Sheets("sheet1") .Range("A3:O" & .Cells(Rows.Count, "A").End(xlUp).Row).Copy End With 'Sheet2のA列の最終行の次の行に貼付け Sheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial Application.CutCopyMode = False End Sub Sub 重複データを一括削除する() ' Macro1 Macro Dim i As Long, lastRow As Long, myRng As Range LastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow - 1 If WorksheetFunction.CountIf(Range(Cells(i + 1, "O"), Cells(lastRow, "O")), Cells(i, "O")) > 0 Then If myRng Is Nothing Then Set myRng = Cells(i, "O") Else Set myRng = Union(myRng, Cells(i, "O")) End If End If Next i If Not myRng Is Nothing Then myRng.EntireRow.Delete End If End Sub

  • プログラムの作り方

    まったくの素人です。 1列にあるデータをキーにして情報の抽出をしたいのですが うまくコードが書けません。 何卒、助勢頂ければ幸いです。 よろしくお願いいたします。 具体的な内容) B列 C列 x  11 ・・適当な不要なデータが数行 y  (2A) ・・適当な不要なデータが数行 x  12 ・・適当な不要なデータが数行 y  (44) ・・適当な不要なデータが数行 x  39 ・・適当な不要なデータが数行 y  (7) ・・適当な不要なデータが数行 から、xのデータとyのデータの表を作りたい。 ただし、yのデータ()内はB列のyの次の行。 できれば、抽出したデータはシート2に並べたい。 Sub macro() Dim a As String Dim b As Variant Dim c As range Dim i As Integer a = x b = "y" i = 1 Worksheets("sheet1").range("B1").Activate For i = 1 To 5000 With ActiveCell If .Value = a Then ActiveCell.Offset(0, 1).Copy Worksheets("sheet2").Select Cells(i, 1).Select ActiveSheet.Paste Sheets("sheet1").Select Else ActiveCell.Offset(1, 0).Activate End If If .Value = b Then ActiveCell.Offset(1, 0).Copy Worksheets("sheet2").Select Cells(i, 2).Select ActiveSheet.Paste Sheets("sheet1").Select Else ActiveCell.Offset(1, 0).Activate End If End With Next End Sub

  • 【Excelマクロ】もっと頭の良い書き方って無いかな?

    5行空白列があったらそこで処理を終わりたいんですが、もっといい書き方はないでしょうか? 下記が私の考えた頭の悪いやり方です。 Sub macro() Dim i As Integer For i = 1 To 1000 If Cells(i, 1) = "" Then  If Cells(i + 1, 1) = "" Then   If Cells(i + 2, 1) = "" Then    If Cells(i + 3, 1) = "" Then     If Cells(i + 4, 1) = "" Then      If Cells(i + 5, 1) = "" Then       MsgBox (i - 1 & "行目で終わりです")       Exit For      End If     End If    End If   End If  End If End If Next End Sub

  • エクセルマクロ 条件分岐 条件に合わない列は削除

    マクロ初心者です。 添付のようなデータが30000万行位ありますが、 1)セルAの値が16またはRFの場合はその行のデータをすべて残します 2)セルAの値が上記以外の場合はその行をすべて削除したいのですが 私なりに調べて次のようなマクロを記録しました。 Sub macro1() Dim i As Integer For i = 1 To 30000 If Cells(i, 1).Value = "16" Or Cells(i, 1).Value = "RF" Then Cells(i, 1) = Cells(i, 1) Else Rows(i).Delete End If Next i End Sub 1)の部分は何とか動いてくれているみたいですが 2)の条件に合わない行の削除の記録がぜんぜんだめみたいで途方に暮れています。 わかる方がいらっしゃいましたら是非ご教授願います。

  • excel2007マクロに関しまして

    excel2007マクロに関して不明な点があるので教えて頂きたいです。 シートが50枚ありそれぞれのシートのN列4~15行に対し そのシートのC列4~15行の値を60倍したものを記載したいのですが 下記入力内容中の Range("N " & j ).Select のところでRange メソッドの失敗が生じてしまいます。 その他にも不備があればご指摘頂きたいです。 宜しくお願いします。 Sub Macro6() ' ' Macro6 Macro ' Dim i, j As Integer For i = 1 To 50 With Sheets("ds1_" & i) Range("N3").Select ActiveCell.FormulaR1C1 = "Q(cum/m)" For j = 4 To 15 Range("N " & j ).Select ActiveCell.FormulaR1C1 = "=RC[-11]*60" Next j End With Next i End Sub

  • 至急お願いします。エクセルのマクロに関してです。

    かなり至急です><エクセル2010のマクロの質問です。 2つ質問があります。 1つ目です。 以下の一連の作業を1つのマクロで行いたいのですが、どうしたらいいでしょうか? 現在は、シート1にデータがあります。 (1)選択した3列を、B~D列に移動する (2)B列に含まれるセルのうち、0(空白)でないセル数分だけシートを追加する。 (たとえば、シート1のB14~B18に数字がはいっていたら、シートを5枚追加するという感じです。) (3)B列に含まれるセルのうち、0(空白)でないセル数分に対し、2行ずつ各シートの3・4行目にコピーする。 (たとえば、シート1のB14~B18に数字がはいっていたら、シート2の3・4行にシート1の14・15行のコピーを貼り付け、シート3の3・4行にシート1の15・16行のコピーを貼り付け、シート4の3・4行にシート1の16・17行のコピーの貼り付ける・・・という感じです。) 現在は (1)Sub () Selection.Cut ActiveCell.Columns("A:C").EntireColumn.Select Selection.Cut Columns("B:B").EntireColumn.Select Selection.Insert Shift:=xlToRight End Sub (2) Sub Macro() Dim n As Long For n = 14 To 18 ' Sheets.Add Next End Sub (3) Sub Macro() Dim n As Long For n = 14 To 18 ' Sheets("Sheet1").Rows(n & ":" & n + 1).Copy _ Sheets("Sheet" & n - 252).Range("A3") Next End Sub と別々のマクロに分けてます。 また(2)(3)でみられる For n = 14 To 18 ' の部分の数字は手動でいれてますが、かなり時間をくってしまうので・・・。 2つ目です。 複数ブックに同じ動作をするエクセルのマクロが知りたいです。 現在100ほどブック(Book1~100)を開いていて、100のブックすべてのSheet1のA1のセルに「1」と入れたいのですが、 そのようなマクロはどうくんだらよろしいでしょうか。 ちなみにExcel2007です。 困っているので、お願いします。

  • エクセル、比較、コピー、貼り付けのマクロ

    エクセルについて 同じシート内にあるB列2行目から66行目までとI列2行目から333行目までの セルを比較し、 B列2行目とI列2行目がおわったらB列2行目とI列3行目を比較という流れになる。 I列の比較が333行目まで終わったら、B列3行目とI列2行目を比較し、終わったらB列3行目とI列3行目を比較していきます。 同じ数値のセルがあったら (1)A列~E列(行は値が一致した行)をコピー (2)H列~L列(行は値が一致した行)をコピーし、 (1)はM列に貼り付け (2)はR列に貼り付け VBAのコードは以下の様になります Sub t() x = 2 y = 2 g = 1 n = 1 Do Do If Cells(x, 2) = Cells(y, 9) Then Range(Cells(x, 1), Cells(x, 5)).Copy Destination:=Cells(g, 13) Range(Cells(y, 8), Cells(y, 12)).Copy Destination:=Cells(n, 18) y = y + 1 g = g + 1 n = n + 1 Else y = y + 1 End If Loop While y < 334 Loop While x < 67 End Sub これを実行すると実行エラー1004 アプリケーション定義又はオブジェクト定義の エラーになります。誰か回答をお願いします。

  • エクセル2000でマクロを作成するのに困っています。

    エクセル2000でマクロを作成するのに困っています。 ↓やりたいこと (1)データを一行コピーする (2)別のファイルを開いて、データを値貼り付けする。  ※値を貼り付けるのは、空白のセルに。 (同じように下の列に値貼りつけを順次行い、データを作成する) ----------------------------------------------------------------------------------------- Sub Macro1() ' ' Aファイルの1行をBファイルのA列が空欄の行へ貼りつけ' 'シートの選択' Worksheets("Sheet3").Activate '行を選択コピー' Sheets("Sheet3").Rows("2:2").Select Selection.Copy 'ファイルを開く' Workbooks.Open Filename:="C:\Documents and Settings\hiro\デスクトップ\Book2.xls" 'ファイル選択' Windows("Book2.xls").Activate 'シートを選択しA列が空欄のセルに貼りつけ' Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues Application.CutCopyMode = False 'ファイルオープン時のシートを選択' Worksheets("Sheet1").Activate 'ファイルを閉じる' ActiveWorkbook.Close SaveChanges:=True '元ファイルに戻る' Windows("100520_一覧.xls").Activate End Sub -------------------------------------------------------------------------------------------- 2003ではうまくいきますが、会社のPCが2000のためか、下記文言でエラーがでます。 'シートを選択しA列が空欄のセルに貼りつけ' Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues Application.CutCopyMode = False ●エラー表示   438 プロパティまたはメソッドをサポートしてません。 どのように入力すればよいでしょうか。 マクロを今まで一度も作ったことがわからないので、本当にわかりません。 よろしくお願いいたします。

専門家に質問してみよう