• ベストアンサー

VBAの動作について

お世話になっております。現在VBAの勉強をしております。 そこで新規にExcelを起動してまずB2にaと入力。そしてEditorを広げて標準モジュールを挿入して Sub a() With Range("B2") .HorizontalAlignment = xlHAlignCenter End With End Sub このような記述をしたのですがB2の文字は中央になってくれません。 初歩的で申し訳ありませんが考えられる理由をよろしくおねがいします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

シートが指定されていないので現在アクティブになっている別のートのB2に操作が行われたものと思います。 シートを明示してやってみてください。

その他の回答 (3)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

「このような記述をしたのですが」と、だけ在るので念のために確認ですが、記述した後、このマクロaを実行したのですよね? マクロ名をセルに書くだけで実行されると思って居るわけでは無いですよね?

  • liberty01
  • ベストアンサー率29% (16/54)
回答No.2

記述されてるコード張ってマクロ実行しましたが、動きましたよ。。。。 考えられるのはぁ~B2に値を入力したシートを選択状態にしていないとかかなぁ~・・・・

  • Kotori_D
  • ベストアンサー率36% (54/149)
回答No.1

マクロの記録を実施すると Range("B2").Select With Selection .HorizontalAligment = xlCenter .VerticalAligment = xlCenter (省略) End With と出ます。 私も詳しくないのですが、これで動きますね

関連するQ&A

  • Excel VBA With ~ End With

    Excel VBA With ~ End Withを使わずに記述するには Sheet1シートのセルA1,A2,B1,B2にA,B,75,25の値を入力して、 Sub test1()  With ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart   .ChartType = xlBarStacked100   .SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows  End With End Sub を実行すると横棒グラフが1個表示されますが、 これを、With ~ End Withを使わずに記述すると Sub test2()  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.ChartType = xlBarStacked100  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows End Sub というようになると思いますが、 実行すると縦棒が2個表示されてしまって同じ結果になりません。 なぜなのでしょうか。 test1を、With ~ End Withを使わずに記述するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。(Windows10,Excel2016)

  • エクセルVBA:コピーの貼り付け先

    VBA初心者です。よろしくお願いします。 あるデータベースをセルB2に入力されている値で絞込み、 シート2に貼り付けるとき、下記の(1)がおそらく正解だと思いますが、 ★(質問1) (2)でも同じ結果が得られました。コピー先の目的地を示す「Destination:=」の部分は省略して全く問題なしと考えてよろしいのでしょうか? ★(質問2) (3)で試してみても同じ結果が得られました。range("sheet2!A1") なんて書き方は、たまたま、試してみたらできちゃった(同じ結果が得られた)のですが、使い方として問題ありませんか? ------------------------------------------------------------- (1) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (2) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (3) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Range("Sheet2!A1") .AutoFilter End With End Sub

  • VBAで列全てに式を入れたいんです。

    エクセルで 例えばセルA1,B1,C1を選択して 3つのセルの値をD1に値としてコピーする事は出来ませんか? A1,B1,C1はVBAで得た値です。 関数で1つにすると、もう一度コピーして値として 貼り付けなけねばなりませんので・・・ VBAは他の方に作成して頂いたので、 知識としてはありません。 VBAでの追加の仕方があればお教え下さい。 下記の回答を頂きまして 上手くいったのですが、 その式を、列全てで行うのはどうすればいいのでしょうか? 「 次のコードをEnd Subの上の行に挿入してください With Sheets("シート名") .Range("D1") = .Range("A1") & .Range("B1") & .Range("C1") End with 」 すみません。誰かお教え下さい。

  • VBA クラスモジュールについて

    http://www.excellenceweb.net/vba/class/what_vba_class.html を見ながらクラスモジュールの勉強をしているのですが 躓きました。 新規にクラスモジュールを挿入し オブジェクト名に果物売上と名付けました。 そこに、 Sub TEST() Dim Apple As 果物売上 Set Apple = New 果物売上 End Sub と入力しました。 そして標準モジュールを挿入し、 そこに Sub TEST() Dim Apple As 果物売上 Set Apple = New 果物売上 With Apple .名前 = "リンゴ" .価格 = 100 .在庫 = 20 .仕入数 = 50 End With With Apple Debug.Print .名前 End With End Sub を入力しました。 そして、デバッグすると 「Apple As 果物売上」の部分が コンパイルエラーになってしまいます。 全然クラスモジュールの使い方がわからないのですが どこを直せばいいのでしょうか?

  • VBAの初歩的な質問

    VBAの基本的な事なのですが(すいません、あまりに初歩的な事なのでこちらに質問させていただきました。) よく、プログラミングを書く時に、プログラム途中で、行が1つ2つ続けて空いている時ありますよね。あれは、何か意味があるのですか。 改行した所で、一つの処理が終わってますよね?(1行、2行・・空いて無くても処理は変わらないですよね?) それと、プログラム途中で、書き出しの頭がそろえる時とづらす時もありますよね。 あれも、何か意味があるのですか?(ここからここまでの処理と見やすくするため?) 例 づらしてない時 Sub test01() With Sheets("Sheet1").Range("A1") .Value = Time .NumberFormatLocal = "h:mm:ss" End With Application.OnTime Now + TimeValue("0:00:01"), "test01" End Sub づらしている時 Sub test01()   With Sheets("Sheet1").Range("A1")     .Value = Time     .NumberFormatLocal = "h:mm:ss"   End With  Application.OnTime Now + TimeValue("0:00:01"), "test01" End Sub それと、もう一つすいません VBAの→標準モジュールの→モジュール1内にプログラムが一つ入っています。 そのプログラムはシート1でDDEで取り込んだデータ(シート1の特定のセルに入っている)を計算、蓄積、記録など処理するようにプログラムが入っています。 そのシート1と同じ処理をシート2、3、4、(セル位置は一緒)にも同じくさせたいのですが、(それぞれのシートでDDEのデータが変わってくるのですが) そのような場合は、基本的な考え(作り方)として 標準モジュールのプログラム内で書き換えるだけで対処出来るのでしょうか? それとも、エクセルオブジェクト内→シート1やシート2などに、個別にプログラムを(多少書き換えて)入れていく感じになるのでしょうか? どなたか、ご存じの方おられましたら、よろしくお願いします。

  • VBAで作成したComboboxにVBAでマクロを割り当てたい。

    下記コードでcomboboxをつくったのですが 作成されたCombobox1のComboBox1_Changeエベントに 標準モジュール内のSub cal をVBAで割り当てたいのですが可能でしょうか。 コンボボックス作成マクロ x=0 y=0 With Worksheets("Sheet1").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False) .Left = X .Top = Y .Width = 53.25 .HEIGHT = 18 .ListFillRange = "AAA" End With これで作成したコンボボックスに標準モジュール内マクロをVBAで割りあてしたい。 標準モジュール sub cal ・ ・ end sub

  • エクセルVBA

    VBAの素人です。 以下のようなVBAを実行しようと、何とか形にしました。 単独のBOOKではうまくいくのですが、同時に他のBOOKを開くと 「インデックスが有効範囲にありません」とエラーになります。 エラー箇所は、With Sheets("Sheet1").Range("B1")部分です。 修正をご教示頂ける方、何卒よろしくお願い致します。 全くVBA無知なのにすみません。 Private Sub Workbook_Open() test01 test02 Application.OnTime Now + TimeValue("00:10:00"), "終了" End Sub Sub 終了() Application.OnTime Now + TimeValue("0:00:02"), "test01", , False ThisWorkbook.Close Savechanges:=False Application.Quit End Sub Sub test01() With Sheets("Sheet1").Range("B1") .Value = Time .NumberFormatLocal = "mm:ss" End With Application.OnTime Now + TimeValue("0:00:02"), "test01" End Sub Sub test02() With Sheets("Sheet1").Range("B2") .Value = Time .NumberFormatLocal = "mm:ss" End With End Sub

  • excel|シートのリンク方法について

    いつもお世話になります。 エクセルは2010を利用しています。 現在、下記のコードで、文字揃えを制御しています。 A1~C1は、それぞれセルが結合されています。 ---------------------------------------------------------- Sub HorizontalAndVerticalAlignmentSamp1() If Range("B1").Value = "" Then With Range("C1") .HorizontalAlignment = xlHAlignRight End With Else With Range("C1") .HorizontalAlignment = xlHAlignLeft End With End If If Range("A1").Value = "" Then With Range("B1") .HorizontalAlignment = xlHAlignRight End With Else With Range("B1") .HorizontalAlignment = xlHAlignCenter End With End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1:C1") <> "" Then Call HorizontalAndVerticalAlignmentSamp1 End Sub ------------------------------------------------------------------------- シート2、シート3は、A1~C1のセルがシート1とおなじように結合されています。 シート1で、A1~C1に文字を入力したら、おなじ文字と文字揃えがシート2、シート3でも反映、シート1で、A1~C1に入力されていた文字を削除すると、シート2、シート3も消えているようにしたいです。 わたしの知っている限りの範囲でがんばってみたことは シート2、シート3のA1に「=Sheet1!A1」、B1に「=Sheet1!B1」、C1に「=Sheet1!C1」と入力して シート2、シート3にも上記とおなじマクロを記述してみました。 けれど、シート1で入力しても、シート2、シート3を選択して、どこかのセルを1回選択しないと、文字揃えが反映されませんでした。 そこで、 シート1の上記マクロに Sheet2.select Sheet3.select Sheet1.select を追加してみました。 けれど、あたりまえといえばあたりまえなのですが、シート1でどこかのセルを選択するごとにシート2、シート3、シート1と画面が切り替わるようになり、画面が切り替わったあとにシート2、シート3を見てみても、文字揃えはどこかのセルを選択しないかぎりおなじく反映されませんでした。 どのようにしたらいいのかが分からず、質問いたしました。 みなさまのお知恵を借していただけますと幸いです。 どうかよろしくお願いいたします。

  • EXCEL 異なるVBA

    教えて下さい、EXECL以下の異なるVBA (A>,B>)が2つあります、同じシートでそれぞれ動くようにさせたいです1つに合わせる事は出来ないでしょうか? 当方初心者の為わかりません教えて下さい。 A> Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Address(0, 0, xlA1, 0) <> "A1" Then Exit Sub With Range("F9:I9,K17:K36").Borders(xlDiagonalUp) If Left$(Target.Value, 1) = "S" Then .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Else .LineStyle = xlNone End If End With End Sub B> Private Sub Worksheet_Change(ByVal Target As Range) With Sheet2 Select Case Target.Address Case Is = "$D$1" .Range("A1").Insert Shift:=xlDown .Range("A1").Value = Target.Value Case Is = "$D$2" .Range("B1").Insert Shift:=xlDown .Range("B1").Value = Target.Value End Select End With End Sub

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

専門家に質問してみよう