質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

1回答

1096閲覧

【VBS】Excelで同じ値のセルを結合したいです

miy-sato

総合スコア2

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2022/07/06 05:40

実現したいこと

VBSを使用し、Excelで列方向に同じ値が続く場合、セルを結合したいです。

発生している問題・エラーメッセージ

作業列に値をコピーし、ループ処理で値が重複している範囲を取得しようとしているのですが、
44行目でUnionの型が一致しないエラーとなります。
VBS初心者で大変恐縮なのですが、解決のヒントをいただきたくお願いします。

該当のソースコード

Dim filePath Dim objXls Dim objWorkbook Dim objWorkSheet filePath = "C:\Users\Desktop\test\test.xlsx" Set objXls = CreateObject("Excel.Application") objXls.Visible = true Dim fs Dim fn Set fs = CreateObject("Scripting.FileSystemObject") Set fn = fs.GetFile(FilePath) fn.attributes = 0 ' Workbookを開く Set objWorkbook = objXls.Workbooks.Open(FilePath) Set objWorkSheet = objWorkbook.Worksheets(1) '作業列に値を貼り付け objWorkSheet.Range("C2:C9").Value = objWorkSheet.Range("A2:A9").Value '重複を削除 'Range("C2:C9").RemoveDuplicates Columns:=1 objWorkSheet.Range("C2:C9").RemoveDuplicates Array(1, 2) Dim A '重複しないリストをループ For j = 2 To 5 Flag = 0 'フラグをオフ A = Empty '初期値を入力 '結合するリストをループ For i = 1 To 9 '重複しないリストと値が一致した場合 If objWorkSheet.Cells(i, "A") = objWorkSheet.Cells(j, "C") Then '最初の場合 If IsEmpty(A) Then '範囲を保存 Set A =objWorkSheet.Cells(i, "A") '2回目以降 Else '範囲を追加で保存 Set A = Union(A, objWorkSheet.Cells(i, "A")) End If End If Next Application.DisplayAlerts = False '警告を非表示 '結合する A.Merge A.VerticalAlignment = xlCenter '上下中央揃え A.HorizontalAlignment = xlCenter '左右中央揃え Application.DisplayAlerts = True '警告を表示 Next '作業列をクリア Range("C2:C9").Clear ' Workbookを閉じる objWorkbook.Close objXls.Quit Set objWorkbook = Nothing Set objXls = Nothing

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miy-sato

2022/07/07 02:02

ご回答ありがとうございます。 期待通りの動作になりました!
guest

回答1

0

ベストアンサー

vba

1 Set A = Union(A, objWorkSheet.Cells(i, "A"))

ここでエラーということですよね。Union はVBSの関数ではなく、エクセルアプリケーションのメソッドですので、
下記のようにする必要があります。

vba

1 Set A = objXls.Union(A, objWorkSheet.Cells(i, "A"))

投稿2022/07/06 06:59

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問