• ベストアンサー

マクロのif文

「もしアクティブセルの一つ上のセルが選択状態だったら」 上記のマクロ文は以下では違うと思いますが、正しいものを教えて下さい。 If ActiveCell.Offset(1, 0) = Selection Then

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんな感じです。   Dim rngC As Range      Set rngC = Intersect(ActiveCell.Offset(-1, 0), Selection)   If Not rngC Is Nothing Then     MsgBox "選択されています"   Else     MsgBox "選択されてません"   End If Intersect メソッドを VBA のヘルプで調べてみて下さい。

naruue
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>「もしアクティブセルの一つ上のセルが選択状態だったら」 それは、むつかしいね。そのようなケースは、かなり少ないです。 私は、経験がありません。 理屈では、以下のようなコードになります。 If TypeName(Selection) <> "Range" Or ActiveCell.Row = 1 Then Exit Sub If Not Intersect(ActiveCell.Offset(-1), Selection) Is Nothing Then   '実行 Else   '別の実行 End If しかし、アクティブセルというのは、1つのセルですから、その上が選択(Selection)状態になっているというのは、もともと、選択された状態ではなくて、選択(Selection)状態の中で、意図的にアクティブセルが動かした結果ですから、本来は、全体の流れを見てみないと、役に立たないかもしれません。

naruue
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マクロ:セルの範囲指定

    エクセルマクロで困っています。 セルの範囲指定をしようとしています。 初心者過ぎて、よくわかりません。 現在のマクロ↓ Sub 済() If ActiveCell.Column = 21 Then Selection.FormatConditions.Delete '条件付き書式削除 With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With '色変え判定セル書き換え ActiveCell.Offset(0, 5).Select ActiveCell.FormulaR1C1 = "77" ActiveCell.Offset(0, -5).Select Else answer = MsgBox("U列を選択して下さい", vbCritical) End If End Sub やりたい事は、下記の通りです。 列Uがアクティブの時にU~ACの行を塗りつぶし。 列は変動します。 今は、やり方がよく分からなかったため オフセットで一つ一つ塗りつぶしてます。 マクロを組みすぎてファイルが重くなって困っています。 回答よろしくお願いいたします。

  • 列幅、行の高さを指定するマクロ

    元マクロ初心者(今はほとんど忘れています)です。 列幅、行の高さを変更するマクロを以前作りました。 セルに指定する列幅を入力するのですが、 最近100以上の値の時はスキップされることに気づきました。 100以上の値でも処理されるようにするにはどうすればよいでしょうか。 Sub 列幅変更マクロ() ' ' Macro1 Macro ' マクロ記録日 : 2004/1/31 ユーザー名 : ' 列幅の変更 ' Keyboard Shortcut: Ctrl+l ' If MsgBox("→:列幅を変更します。右の方向にセル内の数値に従って処理しています。一番右のセルに半角で「@」を終わりの印として入力してください。", vbOK) = 1 Then Do Until ActiveCell.Value = "@" If ActiveCell.Value < 100 Then If ActiveCell.Value > 0 Then Selection.ColumnWidth = ActiveCell.Value End If End If ActiveCell.Offset(0, 1).Select Loop End If End Sub Sub 行の高さ変更マクロ() ' ' Macro2 Macro ' マクロ記録日 : 2004/2/1 ユーザー名 : ' 行の高さ変更 ' Keyboard Shortcut: Ctrl+p ' If MsgBox("↓:行の高さを変更します。下の方向にセル内の数値に従って処理しています。一番下のセルに半角で「@」を終わりの印として入力してください。", vbOK) = 1 Then Do Until ActiveCell.Value = "@" If ActiveCell.Value < 100 Then If ActiveCell.Value > 0 Then Selection.RowHeight = ActiveCell.Value End If End If ActiveCell.Offset(1, 0).Select Loop End If End Sub

  • エクセルのマクロ

    選択状態にあるセル(どのセルも一文字のみ入力されている)に"●"以外が入力されていたら、全て消去する。 上記を実行するマクロとして以下を試してみましたが、うまくいきません。どこがおかしいのでしょうか? Sub test()  For Each cell In Selection   If Selection.Value <> "●" Then   Selection.ClearContents   End If  Next End Sub

  • エクセルで行を非表示にするとアクティブなセルが・・・

    エクセルで行を非表示にするとアクティブなセル?行?がどこかわからなくなり、マクロでアクティブなセルを移動するときにエラーが出ます。 Sub example() ActiveSheet.Range("D3").Select Do Until ActiveCell = 23 If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -3).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -6).Select Else: ActiveCell.EntireRow.Select Selection.EntireRow.Hidden = True ActiveCell.Offset(0, -6).Select End If Loop End Sub 一番下のActiveCell.Offset(0, -6).Select にエラーが出るのですが、どうすればセルを移動できるでしょうか?

  • Do loopのマクロ

    以下のマクロの問題点を教えていただきたいのです。 A列を上から順番に調べて、値が10のときだけBに分岐して処理を行い(処理の内容は省略してあります)、またAに戻って、空白のセルが見つかったら処理をやめる、というマクロです。 ところが、これを実行すると空白のセルが見つかってもマクロが止まりません。何が問題でしょうか。 Sub A() Cells(1, 1).Select A: Do Until ActiveCell.Value = "" If ActiveCell.Value = 10 Then GoTo B End If ActiveCell.Offset(1, 0).Select Loop B: ActiveCell.Offset(1, 0).Select GoTo A End Sub

  • マクロ 繰り返し offset

    マクロについての質問です。 私自身まだ勉強中でまだ初心者です。 マクロを作ってみたのですが、自分の思い通りに動いてくれません。 どなたか詳しい方ご教授いただけませんか? 下記にマクロのせておきます。 Sheets("Sペストリ").Select For i = 1 To 10 Range("D3").Select ActiveCell.Offset(0, 1).Select If ActiveCell.Value = "" Then Exit For Else Selection.Copy Sheets("印刷").Select Range("A1").Select ActiveCell.Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End If Next i End Sub 私がやりたいことは、SペストリというシートのD3セルを選びそこから右にコピーしながらブランクが来るまでOFFSETし、印刷シートのA1セルから下にコピーしたセルの情報んペーストOFFSETしていく感じにしたいのですがうまくいきません。 よろしくお願いいたします。

  • マクロの処理速度向上

    教えてください。マクロ初心者です。以下のようなマクロを組みました。 Sub 処方箋一覧() Dim vbOK As Integer Set WS1 = Worksheets("sheet1") Set WS7 = Worksheets("sheet7") WS7.Select Range("b2").Select Selection.End(xlDown).Select ActiveCell.Offset(1, -1).Select ActiveCell.Offset(0, 1) = WS1.Range("B3") ActiveCell.Offset(0, 2) = WS1.Range("h3") ActiveCell.Offset(0, 3) = WS1.Range("q3") ActiveCell.Offset(0, 4) = WS1.Range("v3") ActiveCell.Offset(0, 5) = WS1.Range("y3")         ~中略~ ActiveCell.Offset(0, 167) = WS1.Range("w75") ActiveCell.Offset(0, 168) = WS1.Range("x75") vbOK = MsgBox("入力完了!!", vbOKOnly, "処理確認") If vbOK = 1 Then Worksheets("sheet1").Activate End If End Sub 合計で167のセルを違うシートに転記するマクロです。 動作するのですが、速度が非常に遅くて困っています。 処理速度を向上させるようなマクロの組み方を調べているのですが、わからず困っています。どなたか、教えていただけると助かります。 よろしくお願いいたします。

  • ExelVBAでのアクティブセルの記述

    Excelマクロ初心者です。 今会社で出勤表のマクロを組んでいるのですが、 「アクティブセルが○列にあった場合、アクティブセルを2行下、30列左に移動させ、それ以外だと右に一つ移動」 という構文は、 「If アクティブセルが○列にある Then ActiveCell.Offset(2, -30).Select Else ActiveCell.Offset(0, 1).Select End If」 となると思うのですが、その肝心な「アクティブセルが○列にある」の記述の仕方が分かりません。 どうかご教授ください。

  • エクセル マクロ VBA について

    以下はセルB2.C2.D2.E2.F2をアクティブセルから右方向へ入力しています。ここでの入力とは"=" + "セルB2" というものです。一つずつ入力している為マクロが長くなります。短くシンプルなものにしたいです。ご教示お願いします。 ActiveCell.FormulaR1C1 = "=R2C2" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C3" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C4" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C5" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C6"

  • エクセルのマクロで

    お世話になります 下記のマクロで実行した所 100まで書式設定で保護、ロックしたいのですが b3:l3はロックするものの 4行目以降はロックしません どうしたらいいでしょうか もう1つ、このシートはいつもc3からはじめたいのですが If ActiveCell.Value >= "" Then の部分はどうしたらいいでしょうか よろしくおねがいいたします 初心者でバカな質問ですみません Sub マクロ1() Dim i As Integer For i = 1 To 100 If ActiveCell.Value >= "" Then Range("B3:l3").Select Selection.Locked = True Selection.FormulaHidden = False End If ActiveCell.Offset(1, 0).Select Next End Sub

おしゃれでかわいい年賀状2023
このQ&Aのポイント
  • 差出人だけを印刷したい。差出人だけのレイアウトが出なくて先に進めなくて困っています。
  • 質問内容:おしゃれでかわいい年賀状2023作りについての質問です。
  • 質問内容:年賀状作成ソフトの使い方で困っています。差出人だけを印刷する方法がわかりません。
回答を見る

専門家に質問してみよう