Excel (VBA)

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

 
(Windows 10全般 : Excel 2016)
指定列の複数データをRange変数に渡したい
投稿日時: 20/06/09 17:41:18
投稿者: mndkyui

こんにちは、よろしければアドバイスをお願いします。
  
Range変数に特定のシート列のデータを重複削除をしたうえで追加したいのですが、下記の処理でうまくいかず困っています。
下記、作成したソースです。
  
  
'データベース内の既存データを取得
'sheetname/シート名 columnnum/データを取得したい列の指定 coldata/取得列データ
Sub combo_set(ByVal sheetname As String, ByVal columnnum As Integer, ByRef coldata As Range)
          
    '当該のシートの当該列からデータを取得する
    Set coldata = Worksheets(sheetname).Columns(columnnum).Cells(xlCellTypeComments)     **
      
    '当該列の見出し以外のデータを重複削除する
    coldata.RemoveDuplicates Columns:=Array(columnnum), Header:=xlYes
      
End Sub
  
  
上記の**列で、「アプリケーションまたはオブジェクト定義のエラー」のエラーを表示します。
"coldata"変数は引用元からは宣言だけした状態で、このsubに来た時点では"Nothing"になっています。
  
おそらく"Nothing"になっていることが問題だと思うのですが、解決方法がわからない状態です。
単純ではありますが、よろしくお願いします。

回答
投稿日時: 20/06/09 19:40:02
投稿者: simple

単に

.SpecialCells(xlCellTypeComments)
とすべきところをミスされているのではないでしょうか。
?xlCellTypeComments
-4144
なので、Cells(xlCellTypeComments)が機能しないことは明らかですかね。
投稿上のミスなら原因は不明ですね。

回答
投稿日時: 20/06/09 20:28:03
投稿者: 半平太

>おそらく"Nothing"になっていることが問題だと思うのですが
それは関係ないです。
このあと、オブジェクトへの参照を格納するので、何の支障もないです。
  
原因は、simple さんのご指摘通りだと思います。
  
まぁ、それをクリアできたとしても、
次のRemoveDuplicates でトラブると思うんですけど。
飛び飛びの範囲は処理できないですからねぇ。
  
取り敢えず、重複あり状態で貼り付けてしまい、
貼り付け先でその箇所だけRemoveDuplicatesを実施すればいいんじゃないですか?
  
>追加したいのですが、
追加なら、Header:=xlNo じゃないですか?
やりたい事の全貌が分からないので、断言はできないですが。

投稿日時: 20/06/09 20:29:21
投稿者: mndkyui

simple さんの引用:
単に
.SpecialCells(xlCellTypeComments)
とすべきところをミスされているのではないでしょうか。
?xlCellTypeComments
-4144
なので、Cells(xlCellTypeComments)が機能しないことは明らかですかね。
投稿上のミスなら原因は不明ですね。

 
 
回答ありがとうございます。
確認したところ確かに凡ミスでそこの修正を忘れていました。
 
アドバイスありがとうございます。

投稿日時: 20/06/09 20:40:45
投稿者: mndkyui

半平太 さんの引用:
>おそらく"Nothing"になっていることが問題だと思うのですが
それは関係ないです。
このあと、オブジェクトへの参照を格納するので、何の支障もないです。
  
原因は、simple さんのご指摘通りだと思います。
  
まぁ、それをクリアできたとしても、
次のRemoveDuplicates でトラブると思うんですけど。
飛び飛びの範囲は処理できないですからねぇ。
  
取り敢えず、重複あり状態で貼り付けてしまい、
貼り付け先でその箇所だけRemoveDuplicatesを実施すればいいんじゃないですか?
  
>追加したいのですが、
追加なら、Header:=xlNo じゃないですか?
やりたい事の全貌が分からないので、断言はできないですが。

 
回答ありがとうございます。
おっしゃる通りのミスだったのでそこの問題は解決いたしました。
 
その後の処理のところまでコメントいただきありがとうございます。
まだ未検証ですが、取得した一列分のデータの重複を削除する意図で書いたのですが、現状だと私の想定していた意図とは異なる処理になってしまうのでしょうか??
 
タイトル違いにはなってしまいますが、よろしければ教えていただけるとうれしいです。
 

回答
投稿日時: 20/06/09 20:52:56
投稿者: 半平太

>現状だと私の想定していた意図とは異なる処理になってしまうのでしょうか??
 
ちょっと不思議に感じるんですが、SpecialCellsで解決を確認したなら、
当然、次の処理に突入したハズですよね。
 
そこで、想定通りの展開になったんですか?
なったのなら、私の思い違いでしかないです。

投稿日時: 20/06/09 20:57:44
投稿者: mndkyui

半平太 さんの引用:
>現状だと私の想定していた意図とは異なる処理になってしまうのでしょうか??
 
ちょっと不思議に感じるんですが、SpecialCellsで解決を確認したなら、
当然、次の処理に突入したハズですよね。
 
そこで、想定通りの展開になったんですか?
なったのなら、私の思い違いでしかないです。

 
こちらのタイトルで教えていただきたかった事は解決いたしましたので、私の想定通りだったと思います。
ご回答ありがとうございました