【Excel2013】マクロで特定のセルを指定しない方法

このQ&Aのポイント
  • Excel2013で特定のセルを指定せずにマクロを実行する方法を教えてください。
  • D8:D80までのセルに入力されている文字を「文字列」に変換するマクロを作成していますが、他のセルでも同じ作業を行いたいです。
  • 選択した状態でマクロを実行することで、文字列にしたいセルを自動的に選択する方法を教えてください。
回答を見る
  • ベストアンサー

【Excel2013】特定のセルを指定したくない

下記マクロはD8:D80までのセルに入力されている文字を「文字列」にするマクロです。 Range("D8:D80").Select Selection.TextToColumns Destination:=Range("D8"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 2), TrailingMinusNumbers:=True Range("D8").Select End Sub 同じ作業を他のセルでも実行することが多々あるため、文字列にしたいセルを選択した状態でマクロを実行したいのです。 どのように設定すればよろしいのでしょうか?

  • KO1014
  • お礼率97% (536/551)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.2

No1の追加です。 Dim mRange As Range Set mRange = Selection.Item(1) を追加して Destination:=Range("D8") を Destination:=mRange に変更してください。

KO1014
質問者

お礼

再度のご回答ありがとうございました。 できました!! Range("D8").Selectは消しておきました。 非常に助かりました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

例えば A列にデータがあり A2は 1,2,5 A4は 3,4 A7は 5,6,7,8 とあるとする。 A2,A4,A7セルを対象にしたい場合、 CTRLを押したままで、マウスでA2,A4,A7をクリックする。 標準モジュールに Sub test01() For Each cl In Selection With cl .TextToColumns _ Destination:=cl.Offset(0, 1), _ DataType:=xlDelimited, _ Comma:=True End With Next Range("D8").Select End Sub を作成し、実行する。 ーー 結果 B,C,D・・列に 1 2 5 3 4 5 6 7 8 セル分離される。 === もし手動では、セル選択したくないぐらい、行数が多いときは、 その条件を質問で説明し、別質問にすること。 (質問にVBAコードだけ挙げて説明が不十分だろう。こういう状況が、質問に説明されていない。不完全。) ーー 上記コードについて、 その他の点も、質問者の場合に合わせて、VBAコードを修正すること。 ーー 結果 各行のB列より右の列に 1 2 5 3 4 5 6 7 8

KO1014
質問者

お礼

ご回答ありがとうございました。 文字を区切りたいわけではありません。 ただ、当方が提示したマクロは、連続していないセルではエラーになってしまうことは確認しました。 文字列にしたいのはほとんどが連続したセルなので、それほど影響はありません。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.3

On Error GoTo Err Selection.TextToColumns , , , , , , , , , , Array(1, 2) Err: とか?

KO1014
質問者

お礼

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

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.1

Range("D8:D80").Select を外せばいいのではないでしょうか。

KO1014
質問者

お礼

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

関連するQ&A

  • エクセルで選択してるセルに決まった動作をマクロに

    いつもお世話になっております。 手動で選択したセルに対して決まった動作をさせたいのですが、マクロの記録では最初に選択したセル番地で動くことになるので困っています。 やりたいことは、例えばA列の5~6行目を選択して、そのセルの内容を文字区切りで横に展開したいのです。 これをマクロの記録では Sub Macro1() Range("A5:A7").Select Selection.TextToColumns Destination:=Range("A5"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _ :="\", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _ 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1)), TrailingMinusNumbers:=True End Sub となるのですが、この最初の行のRange("A5:A7”)Selectをその時に選んだセルで下のコードが実行されるようにしたいのですが。

  • VBA 文字を指定文字で区切り、セルを分けたい。

    WINは7、Excelは2013を使用しています。 「A、B」や「A・B」を、「、」や「・」のところで区切り、セルを分けたいと思っています。 下記、マクロの記録で作ったものを、アレンジしているのですが、 OtherChar:="、" のところで、「・」を追加できなくて、つまづいてしまっています。 修正点をご教示頂けます様お願い致します。 ------------- Sub 区切り() Dim i As Integer Dim j As Integer Dim maxrow As Integer j = InputBox("「行」を数字で入力 " & vbCr & vbCr & "【例】A列=1、B列=2...Z列=26", _ "「行」を半角数字で入力して下さい。") maxrow = Cells(Rows.Count, j).End(xlUp).Row For i = 2 To maxrow Cells(i, j).Select If Cells(i, j) <> "" Then Application.CutCopyMode = False Selection.TextToColumns Destination:=ActiveCell, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=True, _ Tab:=True, _ Semicolon:=True, _ Comma:=True, _ Space:=True, _ Other:=True, _ OtherChar:="、", _ FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _ TrailingMinusNumbers:=True end if Next i End Sub

  • Excel VBAでテキストを開く際の表示形式

    恐れ入りますが、ご存知の方、ご教授願います。 Excel VBAにてテキストファイルを開く際に、表示形式を"標準"ではなく"文字列"で取り込もうと思います。 "文字列"にするにはVBAで下記のように記述します。 ------------------------------------------------------------------ Workbooks.OpenText Filename:= _ sFileName _ , Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _ Comma:=False, Space:=False, Other:=False, FieldInfo:=Array( Array(1, 2), Array(2, 2), Array(3, 2)) , TrailingMinusNumbers:=True ------------------------------------------------------------------ FieldInfo:=部分に列数だけArray(x, 2)を指定しますが、一括で"文字列"指定することは可能でしょうか。 恐れ入ります。ご教授願います。

  • Excel2010 VBAでスペース区切り

    はじめて質問させて頂きます。 VBA初心者ですが、宜しくお願いします。 CSVデータをエクセルにコピペしてから処理することを考えています。 CSVのデータはエクセルで開くと以下の様に入力されています。     |      A列      |  B列 |  C列 | 1行目|   日付 時刻    |データ1|データ2| 2行目|2014/5/14 13:00:01|  ○  |  △  | 3行目|2014/5/14 13:00:14|  ○  |  △  | 時刻は24h制で入力されています。 A列の日付と時刻の間にはスペースがあり、これをVBAでスペース区切りをしたいのです。 B列に列を追加し、スペース区切りの処理をしようと思い、自動記録すると以下のようになりました。 Sub Macro1()     Columns("B:B").Select     Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove     Columns("A:A").Select     Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _      TextQualifier:=xlNone, ConsecutiveDelimiter:=True, Tab:=True, Semicolon _      :=False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array( _      Array(1, 5), Array(2, 1)), TrailingMinusNumbers:=True End Sub ところが、このマクロを実行すると「コピーまたは移動先のセルの内容を置き換えますか?」のメッセージが表示されます。(記録する際には表示されませんでした。) 原因を探ったところ、自動記録のマクロを実行すると時刻が12時間制に変更されB列に、 C列にAM/PMが書き込まれます。(A列の日付は問題なく処理されます。) B列に24時間制の時刻が書き込まれるようにしたいのですが、 何か不足してるとことがあるのでしょうか? 方法を教えて下さい。 お手数ですが、宜しくお願いします。

  • EXCEL2000 区切り位置指定ウィザードについて

    いつもお世話になっております。 以下のようなデータをWebサイトからコピーします。ここでは1行分のデータのみ示していますが、通常は100行以上のデータを扱います。 08/08/28 09:00 94.38 94.54 94.38 94.49 日付、時間、データ1,2,3,4です。 各データはスペースで区切られています。 このデータをシートのあるセルに貼り付けると、一つのセルに上記のデータがすべて入力されます。 それぞれを分割したいので、区切り位置指定ウィザードで区切ります。 すると、それぞれのデータが6列に分割されます。 分割後、先頭の日付は2008/8/28と表示されます。 上記の操作を下記VBAコードで自動でやらせると日付が2028/8/8になってしまいます。 Worksheets("test").Range("H:H").TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)) 質問1.なぜVBAでやると日付がおかしくなるのでしょうか。 この問題を解決するために元のデータを貼り付けた後にデータの先頭に20を付けて2008/08/28にしたいのですが、一度区切り位置指定ウィザードを使うと次回から貼り付けたデータは前回の設定で自動で区切られてしまい、データの先頭に20を付けたら日付が202028/8/8となってしまいます。 質問2.区切り位置指定ウィザードの設定をVBAでリセットすることはできないでしょうか。 うまく説明できませんが、本当に困っています。 よろしくお願い致します。

  • エクセル VBA

    エクセルで指定したフォルダから シート1のA1セルに記入された名前のテキストファイルを 開くマクロを作りました 変数filepassがセルA1に記入されたファイルのパスのとして Workbooks.OpenText filename:=filepass, StartRow:=1 _ , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _ , Space:=False, Other:=False, FieldInfo:=Array(1, 1) しかし このままだと指定したフォルダ(filepass)にファイルがなかったとき エラーになります もしファイルがなかったときに 何かメッセージを表示させたいのですが どのようにすればよいのでしょうか どなたか 教えてください VBAは素人です よろしくお願いします

  • オブジェクト変数の取得について

    以下のようにOpenTextでファイルを開いてそれをオブジェクト変数に取得したいのですが 「Functionまたは変数が必要です」というエラーになります。 どなたかご教示ねがえませんでしょうか? よろしくお願いいたします。 Set WorkBookObject =Workbooks.OpenText FileName:=strPath & strTxt, _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, FieldInfo:=aryCell

  • 「データを置き換えますか?」のメッセージ

    Excel VBA でのマクロ実行時のメッセージについて教えて下さい。 エクスポートしたデータをSheet1にはりつけ、 体裁調整のマクロを実行した時に 「既にデータがあります。置き換えますか?」のメッセージが 出てしまうようになりました。 「OK」を選択するとマクロは実行されるのですが、 右端2列のデータが消えてしまいます。 また「いいえ」を選択すると 「RangeクラスのText To Columnsメソッドが失敗しました」の メッセージが出て中断してしまいます。 実行マクロは Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Columns("I:I").Select Selection.TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True になっており、 J列の前に列を挿入し、I列のデータをスペース区切りで分割しています。 また別のシートでは、 前月の日付のみのデータを残し、それ以外は削除というマクロを組んでいたのですが、 「型が一致しません」というエラーが出てしまいました。 具体的には、D列に下記の日付が入力されています。  2022/5/25  2022/6/1  2022/6/2  2022/6/7  2022/7/8 上記の日付の内、前月の日付(2022/7/8)が入力された行のみ残し、 それ以外は削除したいのですが、上記のエラーが出てしまいます。 実行vbaは下記となります。 Dim r As Range Dim d As Date d = DateAdd("m", -1, DateSerial(Year(Date), Month(Date), 1)) With Range("D4", Cells(Rows.Count, "D").End(xlUp)) For Each r In .Cells If Not DateSerial(Year(r), Month(r), 1) = d Then r.ClearContents End If Next r On Error Resume Next .SpecialCells(xlCellTypeBlanks).EntireRow.Delete xlShiftUp On Error GoTo 0 End With 「If Not DateSerial(Year(r), Month(r), 1) = d Then」 に問題があると表示されています。 今月初めに作業をした時は正常に動作したのですが。。。 質問ばかりで恐縮ですが、どうぞ宜しくお願い致します。

  • エクセル マクロ 教えてください

    お世話になります エクセルのマクロ記録を使った結果が下記のようになりました。 そこで、ファイルは自分で選択して開きたいと思い 色々調べた結果 Application.GetOpenFilenameを使用すればよい事がわかりましたが、どの部分を変更すればよいのかわかりません やりたいことは、txtファイルの中身の不要な部分を削除して必要な部分だけを取り出したいのです。 どうぞ、よろしくお願いします。 Sub Macro1() ' ChDir "C:\Documents and Settings\My Documents\next\aaa" Workbooks.OpenText Filename:= _ "C:\Documents and Settings\My Documents\next\aaa\aaa.txt" _ , Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _ Comma:=False, Space:=True, Other:=True, OtherChar:="(", FieldInfo:= _ Array(Array(1, 9), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 9), Array(7 _ , 9)), TrailingMinusNumbers:=True Cells.Select Cells.EntireColumn.AutoFit End Sub

  • 指定セルをコピー

    A2~A5,D2~D5,G2~G5をコピーしJ~P列2~5行に値を貼付け続いて9~13行、16~20行もJ~P列に貼り付けたいのですが7~8,14~15行にはセル結合されているところもあります。VBAで下記コードを入力しましたがあまりにデータが多く何か良い方法VBAコードはありますか。(For~Nextなど使用すれば良いのでしょうか) 環境はoffice2013です。 Range("A2:A6").Select Selection.Copy Range("J2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D2:D6").Select Selection.Copy Range("M2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False  Application.CutCopyMode = False

専門家に質問してみよう