• ベストアンサー

VBAでのセル操作

こんばんわ。 エクセルのシート上であるデータをコントロールキーを押しながら選択します。 そのデータを処理するときに、RowのAに必須データが入っているのですが、もし、RowのAを選択していなかったら、マクロ側でAのデータをSelectionに加えたいのです、、、 説明がへたくそですでゴメンナサイ。 Selection.Areasに、マクロ側でエリアを追加する事などできるでしょうか?? よろしくお願いします。

  • dole
  • お礼率35% (12/34)

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

april21さんのadressを検索するのはいいアイデアですね。 #2でチェックはFor Each ・・・でと書きましたが必須範囲を含む範囲を選択した場合、うまくいかないと思い、別の方法を考えました。 下は必須範囲を含む範囲を選択した場合は「選択した」ことにしています。 intersectで選択部分と必須部分との共通部分を調べています。選択部分が完全に必須部分を含む場合は「選択」としています。 Public Sub AreaCheck2() Dim rgHissuArea As Range '必須エリア Dim rgSentakuArea As Range '選択エリア Dim rgKyotuu As Range '共通部分 Set rgHissuArea = Range("A1:B2") '***必須データエリアをセット*** Set rgSentakuArea = ActiveWindow.RangeSelection 'intersectメソッドで共通部分を調べる Set rgKyotuu = Application.Intersect(rgSentakuArea, rgHissuArea) If rgKyotuu Is Nothing Then '共通部分がない場合 MsgBox "必須エリア:" & rgHissuArea.Address & "は未選択です。" rgSentakuArea.Select Exit Sub Else '共通部分がある場合 If rgKyotuu.Address = rgHissuArea.Address Then '必須エリアが完全に含まれている MsgBox "必須エリア:" & rgHissuArea.Address & "は選択されています。" rgSentakuArea.Select Exit Sub Else '必須エリアが完全に含まれていない MsgBox "必須エリア:" & rgHissuArea.Address & "は未選択です。" rgSentakuArea.Select End If End If End Sub

その他の回答 (3)

  • april21
  • ベストアンサー率42% (91/216)
回答No.3

みなさんが回答されてるのでもういいかなって思ったのですが 選択のチェックも入れてたので・・・。 Aが何を示すものか良くわからなかったので$A$1にしてます。 適当に変更してください。 ↓のマクロはA1が選択されてない場合A1を追加します。 ----------------------------------------------------------------- Sub sentaku() Dim sentaku As String sentaku = Selection.Address If InStr(1, sentaku, "$A$1", 1) = 0 Then sentaku = sentaku + ",$A$1" Range(sentaku).Select End Sub ------------------------------------------------------------------

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

moon_pocoさんの式で範囲Aの選択を必須とした複数範囲が選択できると思います。 また、Unionメソッドは和集合を返すと思いますので、範囲Aの選択をチェックしなくても望む答えは得られると思います。 チェックが必要であれば・・・For Each で調べればいいと思います。 下記で動作を確認できると思います Public Sub Sentaku() Dim rgHissuArea As Range '必須エリア Dim rgSentakuArea As Range '選択エリア Dim rgMultiArea As Range '結合エリア Set rgHissuArea = Range("A1:B2") '必須データエリアをセット Set rgSentakuArea = ActiveWindow.RangeSelection 'rgMultiAreaは和集合になる Set rgMultiArea = Union(rgHissuArea, rgSentakuArea) rgMultiArea.Select End Sub

回答No.1

これではどうでしょうか Union(Selection, Columns("A")).Select RowのAを選択しているか,どうかをチェックするのは すいません,わかりませんでした。

関連するQ&A

  • VBAで、セルの値をつなげて入力したいのですが・・・

    VBAで、セルの値をつなげて入力したいのですが・・・ エクセル2007を使用しています。 Ctrlキーで2つのセルを選択し、最初に選択したセルの値にスラッシュをつけて、 2番目に選択したセルの値をつなげ、再び1番目に選択したセルに代入したいと思っています。 例えば、A1セルに「佐藤」B1セルに「鈴木」と入力されており、 A1を選択し、Ctrlキーを押しながらB1セルを選択し、コマンドボタンを押すと A1セルに「佐藤 / 鈴木」と入力させたいと思っています。 選択するセルは、1番目も2番目も、変化します。 そこで、下記のようなマクロを書いてみたのですが、 「実行時エラー13 型が一致しません」というエラーが出ます。 Private Sub CommandButton7_Click() If Selection.Areas.Count <> 2 Then Exit Sub Dim a As Variant Dim b As Variant a = Selection.Areas(1) b = Selection.Areas(2) Selection.Areas(1) = a & "/" & b End Sub 変数の型が問題なのでしょうか? ちなみに Selection.Areas(1) = b とすると、2番目に選択した「鈴木」がA1に入力されます。 また、 Selection.Areas(1) = a & b としても同じエラーが出ます。 解決法があるなら、ご教授いただけませんでしょうか? よろしくお願いいたします。

  • 別ブックのセルをSelectionで操作する方法

    Excelの別ブックのセルをSelectionやActiveCellで操作する方法 Excel2010のVBAで別のブックを開いて、 別のブックのあるシートのあるセルを選択して、 この選択したセルに対して SelectionやActiveCellで操作する場合、 ブック、シートはどのように指定をすればよいのでしょうか。 例えば、 MYBOOKに以下のようなVBAコードを記述して、 OTHERBOOKのSHEET4シートの選択されているセルに対して、 SelectionまたはActiveCellでRowを取得する場合、 (1)のように「Selection.Row」や (2)のように「ActiveCell.Row」を記述しただけでは、 MYBOOKのアクティブシートの選択セルの行番号が 取得されてしまいます。 (3)(4)(5)(6)のように記述しても、 「実行時エラー'438':  オブジェクトは、このプロパティまたは  メソッドをサポートしていません。」 というエラーが発生してしまいます。 OTHERBOOKのSHEET4の選択セルの行番号を取得するには、 どのように記述すればよいのでしょうか。 ---------------------------------------------- Dim OTHERBOOK As Excel.Workbook Dim row_no As Integer Set oApp = CreateObject("Excel.Application") oApp.Visible = True Set OTHERBOOK = oApp.Workbooks.Add OTHERBOOK.Activate OTHERBOOK.Worksheets.Add(after:=OTHERBOOK. _ Worksheets(OTHERBOOK.Worksheets.Count)).Name = "SHEET4" OTHERBOOK.Worksheets("SHEET4").Activate '(省略) '(OTHERBOOKのSHEET4シートの中のあるセルが選択されるが ' どのセルが選択されるのかは未定) '(省略) '(1) row_no = Selection.Row '(2) row_no = ActiveWindow.ActiveCell.Row '(3) row_no = OTHERBOOK.Selection.Row '(4) row_no = OTHERBOOK.ActiveSheet.Selection.Row '(5) row_no = OTHERBOOK.Worksheets("SHEET4").Selection.Row '(6) row_no = Application.ActiveWorkbook.ActiveSheet.Selection.Row oApp.Application.Quit Set oApp = Nothing ----------------------------------------------

  • エクセル(VBA)で複数セルのコピーができません

    お世話になっております。 マクロを使って複数のセルを選択してコピーし、別のブックにあるシートへ 貼り付けたいのですが上手くいきません。  Range(Selection, Selection.End(xlToRight)).Select   Selection.Copy 上記のようにコピーしたいセルの入っている行全体の貼り付けは出来たのですが、必要なデータのセルのみ(隣り合っていない)を選択して 貼り付けようとすると何もコピーされていない状態で終了してしまいます。 (変数に代入してコピー等・・・) どなたか教えて下さい。

  • VBAでセルが空白かどうかを調べたい(Excel)

    エクセル2000関連でVBAを勉強し始めました。 A1~C3まで列の名前が入っていて、 A2~C2列以下(データを入れるのはA3~C3, A4~C4・・で、どの行までデータが入っているかは 分からない状態)が空白か どうかを調べたい時にはどう書けばよろしいのでしょうか? ・A65536~C65536まで選択し ・上向きにデータが存在するかどうかを調べていって ・最終的にActiveになっている行番号が1であれば A2~C65536までは空白。 1じゃなければ、データがどこかに存在する。 という方法で調べようかと思ったのですが、 Dim Line As Integer Range("A65536:C65536").Select Range(Selection, Selection.End(xlUp)).Select  Line = Selection.Row でLineの値で判別しようかと思ったのですがうまく いきません。何が間違っているのでしょうか? また、より効率的な方法があったら教えていただき たいです。お願いします。

  • セルの値の入れ替え(Excel)

    エクセルで、各々単一のセル(一つだけのセル範囲)の値を単純に入れ替えるマクロを組んで見ました。これを複数列数と複数列数を入れ替えるマクロに拡張したいと考えています。 具体的には、 □■■■→■■■□ □□■■■→■■■□□ のように単純に入れ替えたいと考えています。 条件は、 □と■の間には他のセルが含まれない状態でののみチェンジ □と■は、同一のシートで同一の行である場合のみチェンジ 書式などについては一切考えないで単純に値のみチェンジ □と■の間に他のセルが含まれない状態の確認が、スマートに出来ません。お手数をお掛けしますがアドバイスいただけないでしょうか?宜しくお願い致します。 Sub Cell_Chenge() Dim MyTmp As String If Selection.Areas.Count = 2 Then If Selection.Areas.Item(1).Count = 1 And       Selection.Areas.Item(2).Count = 1 Then MyTmp = Selection.Areas.Item(1).Value Selection.Areas.Item(1).Value = Selection.Areas.Item(2).Value Selection.Areas.Item(2).Value = MyTmp Else MsgBox "2つのセル範囲は、各々単一のセルでなければなりません。", vbExclamation, "Cell_Chenge" End If Else MsgBox "この操作は、2つのセルを入れ替えるマクロです。", vbExclamation, "Cell_Chenge" End If End Sub

  • VBAで行コピーして挿入

    1行目の内容をコピーして、他の場所に指定数分だけ 挿入するマクロを作りました。 そのマクロ自体は、正しく動いたのですが、コピー元の1行目に 他のシートを参照する関数が入っていた場合、想定どおりの 結果を得ることができません。 [SHEET1:データのみを記載] 省略 [SHEET2] A1セル:   =SHEET1!$A1 ←コピー元の行 [マクロ:一部抜粋] myR = Application.InputBox("挿入する行数を入れてください", , "1") For i = 1 To myR   Rows("1:1").Copy   Cells(ActiveCell.Row, 1).Select   Selection.Insert Shift:=xlDown   Selection.EntireRow.Hidden = False Next i どういう結果を求めたいかというと、たとえば、 SHEET2のA10セル上で、このマクロを実行し、 "挿入行 = 3" と指定したら A10:   =SHEET1!$A10 A11:   =SHEET1!$A11 A12:   =SHEET1!$A12 となってほしかったのですが、結果は、 A10:   =SHEET1!$A10 A11:   =SHEET1!$A10 A12:   =SHEET1!$A10 となってしまいました。 どうにか、求める結果を得られるようにできないでしょうか?

  • エクセルのセルの位置の指定の仕方

    選択状態になっているセルの中の、一番下のセルの行番号のマクロでの指定の仕方を知りたいのですが。 A1:A5が選択されている時は"5"が求める値です。 以下で試してみたのですが、"65536"になってしまいます。 Selection.End(xlDown).Row 正しい指定の仕方を教えて下さい。

  • 【エクセル】 VBAでエラーが出てわかりません。。

    やりたいことは、関数をマクロでセルに記入してオートフィルで指定した行数まで伸ばしたいのです。 (すでに関数で作成したファイルがあるのですが、行数が多いため、とても重い。。^^;) まずマクロの記録で次のマクロを取得しました。 Sub Macro4() Range("C4").Select ActiveCell.Formula = "=SUM(A2:A10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C12"), Type:=xlFillDefault Range("C4:C12").Select Range("D11").Select End Sub そして、 Sheet2に貼り付けて > ActiveCell.Formula = "=SUM(A2:A10)" の"=SUM(A2:A10)"部分をちょっと長い関数ですが、 "=IF(ISERROR(INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1)),"",INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1))" と書き換えてマクロを実行すると「アプリケーション定義またはオブジェクト定義エラーです。」 というエラーが出てしまうんですが、どこを直せばわからないです。。 おかしいところを教えてください、よろしくお願いします。 わかり図らい説明かと思いますが。。この件(1行目の文)について似たようなことを解説して いるサイトがありましたら、教えて欲しいです。

  • VBA チェンジイベント 別シートにデータ転記

    お世話になります。チェンジイベント初心者です。 同一BOOK内の特定のコラムのセルを選択した場合に、自動的に他のシートの特定のセルにデータを転記させたいのですが、どう書けばよいのか分かりません。添付の画像と下記マクロをご覧になって下さい。 -マクロ- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 1 = ActiveCell.Column Then Worksheets("01").Cells(ActiveCell.Row, 3) = Cells(ActiveCell.Row, 1) Worksheets("01").Cells(ActiveCell.Row, 4) = Cells(ActiveCell.Row, 2) End If End Sub メインのシートは[01]です。このシートのC4を選択し、次に[02]のA列にあるセルを選択すると、[02]のA列・B列のデータがC4・D5に転記されるようにしたいのですが、画像にあります通り[02]のA5を選択してしまうと、[01]のC5・D5に転記されてしまいます。 どのようにすれば、[01]でアクティブにしておいた行の3列目、4列目に転記が行われるのでしょうか? よろしくご指南くださいませ。

  • VBAの操作

    ↓の事を行いていのでうまくいきません。 アドバイスをお願いできませんか? 変更前(Sheet1); (A列) (B列) 1 ABC010 Data_010 2 ABC020 (同上) 'B1-B2は結合セル 3 ABC030 Data_020 4 ABC040 (同上) 'B3-B4は結合セル . . 変更後(Sheet2); (A列) (B列) 1 ABC010 "OK" 2 ABC020 "OK" 3 Data_010 "Comp" '追加行 4 ABC030 "OK" 5 ABC040 "OK" 6 Data_020 "Comp" '追加行 . . Sheet1(B列)に値があれば、 Sheet2(A列)に結合セルの単位で値をコピーする。 Sheet2(B列)には"OK"コメント その都度、必ず最後に行追加して結合セルの値、"Comp"コメントをコピーする. 現象は毎行、追加行が挿入されてしまいます。 Sub testVBA() Dim i Worksheets("Sheet1").Range("A:B").Copy With Worksheets("Sheet2") .Range("A1").PasteSpecial For i = 1 To 1000 If .Cells(i, 2) <> "" Then .Cells(i + 1, 1) = .Cells(i, 2) .Cells(i + 1, 2) = "Comp"   .Cells(i, 2) = "OK" End If Next i End With End Sub

専門家に質問してみよう