• ベストアンサー

Visual Basicについて

AKARI0418の回答

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.3

複数の選択範囲がある場合は、Selection <> "" がエラーになります。 複数のセルの値を同時にとるという動作になるため、配列に格納されるためです。 単一セルの場合はSelectionはString型ですが、複数選択の場合はArrayListのような配列型になってしまうため、「型が一致しません」とエラーになってしまいます。 対処としてはSelection(1)のようにインデックス付けが必要です。 そうすれば、問題は解決できると思います。 詳しい使用方法は参考URLを参照ください。

参考URL:
http://www.officetanaka.net/excel/vba/tips/tips111.htm

関連するQ&A

  • Excelの条件付き書式の設定がうまくいきません

    Excel2011(Mac)です。 ある列において、数値が50以上のセルのみ着色したいのですが、条件付き書式のルール設定で数式を利用して =INDIRECT(ADDRESS(ROW(),COLUMN()))>=50 とすると、50以上はすべて着色するのですが、空欄まで着色されてしまいます。 ためしに、 =INDIRECT(ADDRESS(ROW(),COLUMN()))<>"" としてみたら、空欄以外の数値が入っているところがすべて着色されます。 それでは、と思い、 =AND(INDIRECT(ADDRESS(ROW(),COLUMN()))<>"",INDIRECT(ADDRESS(ROW(),COLUMN()))>=50) としてみたら、今度はすべてのセルが着色されません(不思議で仕方ありません)。 どういう数式を書けば、空欄と50未満のところは着色されず、50以上のセルだけ着色されるのでしょうか。

  • EXCEL関数使用で結果が理解できません

    OS:WindowsXP EXCEL2000 以下の表が既に作成されています。 行 :O(英文字オーです) ------------------ 列 6 | 96 7 |216 8 |216 9 |185 10 |(空欄) 11 |(空欄) ここで、セルR6に以下の式が入力されています。 =INDIRECT("R"&MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))&"C"&COLUMN(O6:O11),FALSE) セルR6には185が表示されているため、空欄でない最後の行の数値を 出力させる式のようなのですが、よく理解できません。 ISNUMBER(O6:O11)は全部数値だった場合にTrueになるのですか? ROW(O6:O11)は6でした。 IF(ISNUMBER(O6:O11),ROW(O6:O11))はFALSEです。 MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))は0です。 COLUMN(O6:O11)は15です。 どなたか知恵をお貸しください。

  • エクセルVBA ひとつ下の行を選択したい

    オートフィルタがかかっている状態で、 ひとつ下の行のセルを選択したいです。 具体的には、エクセルシートで選択したセルの情報をフォームで編集するのですが、 そのフォームの中のスピンボタンで選択しているセルを上下に移動させたいのです。 以下のコードだと、当然ですがフィルタで抽出されたセル以外も選択されてしまいます。エクセルシート上での矢印キーやENTERキー(入力後にセルを移動する方向が下のとき)と同じ動きがしたいです。 どうかお助けください。。。 Private Sub SpinButton1_SpinUp() Cells(Selection.Row - 1, Selection.Column).Select Call UserForm_Initialize End Sub Private Sub SpinButton1_SpinDown() Cells(Selection.Row + 1, Selection.Column).Select Call UserForm_Initialize End Sub

  • エクセルのマクロ

    Sub test() x = Selection.Row y = Selection.Column z = Selection.Columns.count Range(Cells(x, y), Cells(x, y + z - 2)).Select Selection.ClearContents End Sub 上記マクロは、同一行の連続するセルを二つ以上選択状態にして実行すると、範囲内の最も右にあるセルの値のみが残って他のセルの値は全て消去されます。 上記マクロを、複数のセレクションに対して対応できるようにするには、どうすればいいでしょうか? 例えば、c1~f1、d3~h3、e10~g10を選択して実行すると、f1とh3とg10の値のみ残って他の値は消えるということです。

  • 別ブックのセルを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 ----------------------------------------------

  • 日付が表示されているセルのみ範囲指定したい

    Excel2007でマクロ作成中の初心者です。 範囲指定がうまくいかない。 1)セルB30  =IF(A30="","",VLOOKUP(A30,表データ,2,FALSE))   セルB31  =IF(A30="","",VLOOKUP(A31,表データ,2,FALSE))    以下略  というように、セルB30~B60まで関数が入っており、  以下のように表示されています。  1   9月21日 2   9月22日    以下略    〃 29  10月19日 30  10月20日 31       ←(ここのセルは日付表示されず空欄。 関数 =IF(A60="","",VLOOKUP(A60,表データ,2,FALSE))が入っている) 2)以下のコードを実行すると Sub 範囲を選択() Range("B30").CurrentRegion.Select Selection.Resize(Selection.Rows.Count - 1).Select Selection.Offset(1, 0).Select Selection.Resize(Selection.Rows.Count - 1).Select End sub 1から31行まで選択されてしまします。これを30行目まで、日付の表示あるセルのみ 選択したいのですが、どうすればよろしいでしょうか

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

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

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

  • VBAで結合セルについて

    任意のセル(行)を選択して、入力画面より文字を入力し表示させます。 複数セルを選択した場合は、選択セルを結合して表示しています。 すでに入力されたセルを含んだセルを選択した場合は、エラーを表示したいと思っています。 未入力セルを選択、入力(結合)されたセルのみを選択した場合は、処理を実行します。 例えば、、、 1)「入力されたセル」のみ選択した場合 → 処理 2)「未入力セル」のみ選択した場合 → 処理 3)「入力されたセル」+「入力されたセル」を選択した場合 → エラー表示 4)「入力されたセル」+「未入力セル」を選択した場合 → エラー表示 5)「未入力セル」+「入力されたセル」を選択した場合 → エラー表示 6)「未入力セル」+「入力されたセル」+「未入力セル」を選択した場合 → エラー表示 下記プログラムでは、上記1)2)3)4)の場合の処理はうまくいくのですが、 5)6)の場合はエラーが表示されません。 ------------------------------------------------------ x = Selection(1).Column y = Selection(1).Column + Selection.Column.Count -1 z = ActiveCell.Row If ActiveCell.Value <> "" Then Set CheckRange = Sheet1.Range(Cells(z,x),(z,y)) If CheckRange.MergeCells Then (処理) Else Message"(エラー表示)" End End If Set CheckRange = Nothing End If ----------------------------------------------------- どのようにしたらよいのでしょうか。

  • Visual Basicのエラー

    以下のプログラムで Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False の部分で「コピー領域と貼り付け領域の形が違うため、情報を貼り付けることができません。」というエラーが出てしまいます。 因みに、コピー元もコピー先も結合セルはありません。 どのように修正すればよいのでしょうか? -------------------------------------------------------------------------------- Retu = Array(, 2, 17, 10, 9, 6, 7, 8) For N = 1 To 7 'Array関数Indexは0から始まるため、最後は抽出列数より1少ないものになる。 計上Sheet1.Activate 計上Sheet1.Range(Cells(5, Retu(N)), Cells(Sheet1件数MaxRow, Retu(N))).Select Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy 計上Sheet3.Activate 計上Sheet3.Cells(25, N).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False