Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
インデックスは有効範囲にありません
投稿日時: 19/12/24 09:50:57
投稿者: chokobanana

シート集計のJ列の氏名を苗字のみに変更するマクロです。
修正しておりましたらエラーが出るようになりました。
 
エラー箇所:r.Offset(0, 0).Value = v(0)
エラー箇所にマウスを当てるとr.Offset(0, 0).Value = Enpty値と出ました。
 
行った修正:
 Dim a
  Set a = Worksheets("集計")
を追加、並びに
   For i = 2 To Cells(Rows.Count, "J").End(xlUp).Row

   For i = 2 To a.Cells(Rows.Count, "J").End(xlUp).Row
に変更しました。
 
どうしたらいいか教えて頂けますでしょうか。
よろしくお願いいたします。
 
 
 
Sub 苗字のみに変更()
 
    Dim i As Integer
    Dim v
    Dim s
    Dim a
    Dim r As Range
     
    Set a = Worksheets("集計")
     
    For i = 2 To a.Cells(Rows.Count, "J").End(xlUp).Row
     
    Set r = Cells(i, "J")
     
    s = r.Value
    v = Split(s, " ")
     
    r.Offset(0, 0).Value = v(0)
     
     Next i
     
 End Sub

回答
投稿日時: 19/12/24 10:17:06
投稿者: WinArrow
投稿者のウェブサイトに移動

問題は、マクロ実行時のアクティブシートがなんであるか?
ということです。
 
Cells(ROws.Count, "J")

a.Cells(ROws.Count, "J")
というようにシートで修飾しているのだから
1ヶ所ではなくすべてのセル記述にシート修飾を適用しましょう。
 
シートで修飾されていないセルは、アクティブシートのセルと解釈されてしまいます。

回答
投稿日時: 19/12/24 10:19:35
投稿者: WinArrow
投稿者のウェブサイトに移動

追記
 
マクロを使わなくても
「データ」タブの「区切り位置」で全角スペースを区切り文字にしてすれば、
1回の操作でお望み通りが実現しますよ。

回答
投稿日時: 19/12/24 11:13:42
投稿者: simple

>エラー箇所にマウスを当てるとr.Offset(0, 0).Value = Enpty値と出ました。
 
エラーになったとき、その行は実行されていないから、
左辺がEmptyということは、氏名のセルが空であったことを意味します。
みるべきは右辺のv。
 
なぜ空白なのかは、そちらで直ぐに分かるはず。(質問に及ぶ理由がよくわからない)
たまたま一行だけ空行が間に入っていたのか、
別のシートを見ているのか、こちらでは不明。

投稿日時: 19/12/24 12:37:23
投稿者: chokobanana

WinArrowさん
 
ありがとうございます。
理解できました。
 
今回はExcelの機能が使いこなせない人用に自動で作成しております。
機会がありましたら別な方法もあることを説明しておきます。