アプリ版:「スタンプのみでお礼する」機能のリリースについて

今画像のようなAからC列をそのままシート2に移し、なおかつC列の中の日本語のみ日本語があったセルの日本語のみ右隣のセルに移すと言うマクロを組んでいたのですが、

Sub 言語判別()
Dim 実行結果 As Object
Dim 判別 As Range

Worksheets("Sheet2").Cells.Clear


Set 実行結果= Worksheets("sheet2")
Worksheets("sheet1").Columns("A:C").Copy Destination:=実行結果.Columns
("A:C")


Set 実行結果 = CreateObject("VBScript.Regexp")
実行結果.Pattern = "[一-龠ぁ-んァ-ンァ-ンパピプペポ]+"

For Each 判別 In Range("C2:C65536")

If 実行結果.test(判別.Value) Then 判別.Offset(, 1).Value =
実行結果.Execute(判別.Value)(0)

Next

Set 実行結果 = Nothing


MsgBox "判別終了しました。", vbInformation, cnsTITLE

End Sub

でやって見たのですがただコピーされるだけで上手くいきません。
シート2に移さずシート1で実行した場合は上手くいきました。
なぜシート2に移したら上手くいかなくなるのかわかりません。
教えてください。

「エクセル マクロについて」の質問画像

A 回答 (1件)

プログラム内で複数のシートを扱う場合、CellsやRangeはどのシートのものかを指定する必要があります。

省略した場合には、アクティブなシートに対して処理が行われます。

 ※なのでコピー後にSheet2をアクティブにするという方法もありますが、
  ちゃんとシートを指定したほうが良いと思います。

あとワークシートと正規表現を同じ変数で使いまわしていますが、ワークシートの方はWorksheet型の変数を使用した方が良いと思います。


Dim 実行結果シート As Worksheet

Set 実行結果シート = Worksheets("sheet2")
実行結果シート.Cells.Clear
Worksheets("sheet1").Columns("A:C").Copy Destination:=実行結果シート.Columns("A:C")

For Each 判別 In 実行結果シート.Range("C2:C65536") ' ←どのシートのRangeかを明確に指定する
    • good
    • 1
この回答へのお礼

ありがとうございます!!

再度試してみます!!

お礼日時:2017/08/08 11:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!