プロが教えるわが家の防犯対策術!

B列に「N」があったら、一番上の「N」の一行上のA列の値をB列に「N」がある行に貼り付けたいです。

このようなことはVBAで可能なのでしょうか。自分でやっても全く実現できなかったので、教えていただけますと幸いです。よろしくお願いいたします。

「【Excel VBA】 B列に特定の文字」の質問画像

質問者からの補足コメント

  • B10が空白になることはありません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/03/03 20:34
  • tatsumaru77様

    情報が不足しており申し訳ございません。

    ①Nが存在する場合、必ず連続して2行以上存在する。⇒Nが存在する場合、Nが1つの場合もあり得ます。
    ②2行目にNが存在することはない。⇒その通りです。

      補足日時:2022/03/03 20:57

A 回答 (4件)

条件の解釈が違っているかもしてませんが、


以下のマクロを標準モジュールに登録してください。
Shee1に作用するのではなく、アクティブシート(表示されているシート)
に作用します。
シートを直接書き換えるので、必ずバックアップをとってから行ってください。

Public Sub A列変更()
Dim ws As Worksheet
Dim wrow As Long
Dim maxrow As Long
Set ws = ActiveSheet
maxrow = ws.Cells(Rows.Count, 1).End(xlUp).Row 'sheetの最大行取得
Dim pval As String
pval = ""
For wrow = 2 To maxrow
If Cells(wrow, 2).Value = "N" Then
Cells(wrow, 1).Value = pval
End If
pval = Cells(wrow, 1).Value
Next
MsgBox ("完了")
End Sub
    • good
    • 0
この回答へのお礼

ご丁寧に回答頂きありがとうございました。
情報が不足しており申し訳ございませんでした。

教えて頂いたマクロで、やりたいことが実現できました。
自分でも書けるように勉強したいと思います。

本当にありがとうございました。

お礼日時:2022/03/03 21:14

>B10が空白になることはありません。


ということは、
①Nが存在する場合、必ず連続して2行以上存在する。
②2行目にNが存在することはない。
ということでしょうか。
    • good
    • 0

こんばんは



>このようなことはVBAで可能なのでしょうか。
B2がNの場合にどうするのか不明ですけれど、基本的には可能です。

ご質問とは異なりますが、以下に関数で行う方法の例をご参考までに。
1)C1セルに以下の式を入力
 =IF((ROW()=1)+(B1<>"N"),A1,OFFSET(C1,-1,0))
2)C1セルをC12までフィルコピー
以上で、お求めの内容がC列に表示されると思います。

続いて、
3)C列を選択して、カット。(Ctrl+X)
4)A列を選択して、「値をペースト」。(Alt+H V S V Enter)


※ どうしてもマクロが必要な場合は、上記の「マクロの記録」をとることでも作成可能と思います。
    • good
    • 1
この回答へのお礼

ご丁寧にありがとうございます。
教えていただいた方法で、実現することができました。

ありがとうございました。

お礼日時:2022/03/03 21:12

左側の図で、もし、B10が空白なら、どうなりますか。


A9=C1268、A11=C1270ですか。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A