![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
初めまして最近仕事でログ処理用のマクロを作成しているのですが、
マクロ初心者で、こんな場合どうしたらよいでしょうか?
教えてください。よろしくお願いします。
処理前
A列 B列 C列
janConnectTime
feb空白JST
mar空白ConnectTime
apr空白JST
may空白ConnectTime
jun空白ConnectTime
処理後
A列 B列 C列 D列
janConnectTime
feb空白 空白 JST
mar空白ConnectTime
apr空白 空白 JST
may空白ConnectTime
jun空白ConnectTime
この場合B1にIF(C1="ConnectTime","","セルを挿入し右にシフト")的な処理をし、B列に適用させたいのですが可能でしょうか?
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
No.2です。
> これは、B列全体を処理するマクロなのでしょうか?
> それともB1に対してのマクロなのでしょうか?
A列にデータが入ってる範囲において処理を行っています。質問の例で言うと、janがA1から始まっているとすると、A1からA6までデータが入っているので、1行目から6行目までの処理となっています。
For Each R In Range("A1", Cells(Rows.Count, 1).End(xlUp))
というのは、RというRange型の変数を、A1からA列の一番下にデータが入っているセルまでループでまわす、という意味で、R.Offset(,1)というのがRから1つ右のセル、つまりB列で、R.Offset(,2)というのがRから2つ右のセル、つまりC列を表します。
If R.Offset(, 2) <> "ConnectTime" Then
R.Offset(, 1).Insert Shift:=xlShiftToRight
End If
というのが、C列が"ConnectTime"でない場合は、B列にセルを挿入し、右にシフトする、という意味になります。
したがって、
> For Each R In Range("A1", Cells(Rows.Count, 1).End(xlUp))
> この行のA1は、自分の例の場合はB1ということでしょうか?
は、このままでいいです。A列を基準にデータの有無を判定してループをまわさないと、どこがデータの終端行かわからないのでこのような記述になっています。
丁寧なご回答ありがとうございました。
おかげ様でやりたい処理ができました。
それに勉強になりました。ありがとうございます。
もっと勉強して自分でマクロを書けるように頑張りたいと思います。
本当にありがとうございました。
No.2
- 回答日時:
質問の例ではjanの行だけB列に空白でなくConnectTimeが入っており、C列の値がありません。
> この場合B1にIF(C1="ConnectTime","","セルを挿入し右にシフト")的な処理をし、B列に適用させたい
に忠実にしたがうと、janの行はC列がConnectTimeでないので右にシフトされるはずですが、例では処理後も変わっていません。これは単にB列に「空白」というのを入れ忘れただけで、marやmayの行と同じなのでしょうか。
一応そうだと仮定してマクロを書いてみました。
Sub Sample()
Dim R As Range
For Each R In Range("A1", Cells(Rows.Count, 1).End(xlUp))
If R.Offset(, 2) <> "ConnectTime" Then
R.Offset(, 1).Insert Shift:=xlShiftToRight
End If
Next
End Sub
ご回答ありがとうございます。
> に忠実にしたがうと、janの行はC列がConnectTimeでないので右にシフトされるはずですが、例では処理後も変わっていません。これは単にB列に「空白」というのを入れ忘れただけで、marやmayの行と同じなのでしょうか。
申し訳ございません。入れ忘れでした。訂正いたします。
処理前
A列 B列 C列
jan 空白 ConnectTime
feb 空白 JST
mar 空白 ConnectTime
apr 空白 JST
may 空白 ConnectTime
jun 空白 ConnectTime
処理後
A列 B列 C列 D列
jan 空白 ConnectTime
feb 空白 空白 JST
mar 空白 ConnectTime
apr 空白 空白 JST
may 空白 ConnectTime
jun 空白 ConnectTime
となります。
マクロありがとうございました。
初歩的な質問かも知れませんが宜しくお願いします。
かいていただいたマクロですが、これは、B列全体を処理するマクロなのでしょうか?それともB1に対してのマクロなのでしょうか?
For Each R In Range("A1", Cells(Rows.Count, 1).End(xlUp))
この行のA1は、自分の例の場合はB1ということでしょうか?
質問ばかりで申し訳ありませんが、どうぞ宜しくお願いいたします。
No.1
- 回答日時:
「式」によって「処理前」から「処理後」を得るのであれば、「処理前」と「処理後」のシートを別にした方がよいのではないでしょうか?
いろいろやっているうちに「再帰的」な処理が行われると結構面倒になるかも知れません。
「処理前」のデータをSheet1に入れ、「処理後」をSheet2で得るという事です。
そうすれば処理前のデータに触れる事無く、Sheet2に式を入れる事でSheet2に「処理後」を得る事ができます。
式作成中に元データを破壊する事もありませんし、そのほうがよいかと思います。
そう考えれば、式も単純になると思います。
さらに言えばセル中の「式」で他のセルを操作するというのは出来ないかも知れませんし。
ご回答ありがとうございます。
申し訳ありません説明不足でした。
式によるセルの挿入はできないとのことなので、マクロでinsertを使って処理することにしたんですが、どう説明したらいいのか難しかったのでIF文で処理したい内容を表してみました。
シートを分けることはとても参考になりました。
データの破損を防ぐ為検討したいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelについて質問です(ver2019) 1 2023/06/30 21:20
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) 列の複数ある空白セルを飛ばして、セルに並べて表示したい 3 2023/02/12 16:49
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) セルに抜けた番号の代わりに空白を挿入する 4 2023/04/10 20:29
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで条件をつけて図形を...
-
エクセルで非表示行を抜かして...
-
エクセルでの6ヶ月平均の出し方
-
エクセルVBA 作業後に選択範囲...
-
別のフォームで記述している関...
-
ワードで、グレーの部分しか入...
-
プロアクションリプレイmax2の...
-
Excel VBA 選択範囲の罫線色の...
-
Sub Auto_Open() 実行されない
-
PHPで最も近い緯度経度をDBデー...
-
ACCESSで別DBにあるクエリを...
-
フルスクリーンモードで開いたP...
-
ascW関数の結果がおかしい
-
メフィスト賞の応募歴は無しだ...
-
HTMLタグについてお詳しい方に...
-
VBAでのユーザフォームの表示有...
-
エクセルVBAユーザーフォーム
-
ExcelVBAで毎月月初の最初にBoo...
-
ワード2003で文書の一部を保護
-
エクセルのユーザーフォームに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで条件をつけて図形を...
-
エクセルでの6ヶ月平均の出し方
-
エクセルで非表示行を抜かして...
-
Excelで連番が増えるごとに数式...
-
複数のセルと複数のセルの入力...
-
Excelの関数で複合条件に一致し...
-
VBA ピポットテーブル 前年比の...
-
Excelで可視している中に貼り付け
-
EXCELで選択範囲の中で、上から...
-
月末日に、各月の合計温度を出す
-
マクロで条件に不一致なら空白...
-
Excelについて
-
またまた エクセルのユーザー...
-
エクセルVBA 作業後に選択範囲...
-
別のフォームで記述している関...
-
ワードで、グレーの部分しか入...
-
Sub Auto_Open() 実行されない
-
VBAでのユーザフォームの表示有...
-
エクセル マクロ 別シートから...
-
ACCESSで別DBにあるクエリを...
おすすめ情報