![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
初めてのマクロで困っています。
エラーメッセージは、
実行時エラー '13':
型が一致しません。
===で囲んだ部分がデバックをクリックすると黄色で表示されます。
すみませんが、どなたかご指摘お願いします。
どうぞよろしくお願いいたします。
Sub test()
Dim i As Integer
Dim SET_SheetCnt As Integer
Dim SET_SheetName As String
Dim SET_SheetN_C As String
Dim SET_startRow As Long
Dim SET_endRow As Long
Dim SET_startCell As String
Dim SET_endCell As String
Dim SET_Cell As String
Dim SET_Returnsheet As String
Dim DQ As String
Dim SET_FileNo As Integer
SET_SheetCnt = ThisWorkbook.Sheets.Count
SET_Returnsheet = ActiveSheet.Name
SET_FileNo = FreeFile
DQ = Chr$(&H22)
Sheets(SET_Returnsheet).Cells.Clear
For i = 1 To SET_SheetCnt
SET_SheetName = Worksheets(i).Name
If SET_SheetName <> SET_Returnsheet And SET_SheetName <> "template" Then
With ThisWorkbook.Worksheets(i)
'Start行
Cells(2, 2).Select
SET_startRow = .Cells.Find(What:="業務名", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False).Row
SET_startCell = "R" & SET_startRow & "C3"
'End行
SET_endRow = .Cells(.Rows.Count, 19).End(xlUp).Row
SET_endCell = "R" & SET_endRow & "C19"
SET_Cell = SET_startCell & ":" & SET_endCell
'計算範囲の書き込み
Worksheets(SET_Returnsheet).Cells(1, 1).Value = "計算範囲"
Worksheets(SET_Returnsheet).Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = "Array(" & DQ & "'" & SET_SheetName & "'!" & SET_Cell & DQ & ", " & DQ & SET_SheetName & DQ & "), "
End With
End If
Next i
'最終セルの不要な文字列を取りファイルに格納
Sheets(SET_Returnsheet).Select
Dim LastRow As Integer
With Worksheets(SET_Returnsheet).Cells.SpecialCells(xlCellTypeConstants).Areas
With .Item(.Count)
LastRow = .Item(.Count).Row
End With
End With
Dim a As String
Dim b As String
Dim c As String
Dim d As String
a = Worksheets(SET_Returnsheet).Cells(LastRow, 1).Value
b = Len(a)
c = Mid(a, 1, (b - 2))
Worksheets(SET_Returnsheet).Cells(LastRow, 1).Value = c
Open "c:\test.txt" For Output As #SET_FileNo
For i = 2 To LastRow
d = Worksheets(SET_Returnsheet).Cells(i, 1).Value
Print #SET_FileNo, d;
Next i
Close #SET_FileNo
Dim FileData As variant
Open "c:\test.txt" For Input As #SET_FileNo
While Not EOF(SET_FileNo)
Line Input #SET_FileNo, FileData
Debug.Print FileData
Wend
Close #SET_FileNo
'ピボット計算-------
Worksheets(SET_Returnsheet).Activate
Sheets(SET_Returnsheet).Cells.Clear
'==ここから黄色で囲まれる分です====
ThisWorkbook.PivotCaches.Add(SourceType:=xlConsolidation, SourceData:= _
Array(FileData)).CreatePivotTable TableDestination _
:=Range("A11"), TableName:="ピボットテーブル1"
'===ここまで====
ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データ").PivotItems( _
"データの個数 : 値").Position = 1
Range("A17").Select
ActiveWindow.SmallScroll Down:=-9
ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "行[すべて]", xlLabelOnly
Range("A11").Select
ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データの個数 : 値").Function = _
xlSum
End Sub
No.1ベストアンサー
- 回答日時:
こんにちは。
複数シートからのピボットのSourceDataは、
R1C1形式アドレスの『配列』である事が必要のようです。
文字列をArray()に入れるのではなく、素直に配列に格納したほうが良さそう。
Sub sample()
Dim ws As Worksheet 'For Each...Next WorksheetsLoop用
Dim r As Range '検索結果セル格納用
Dim rs As Range '各Sheetピボット元データ範囲格納用
Dim v As Variant 'アドレス,Sheet名格納用Array
Dim x() As Variant 'Arrayをさらに格納する配列
Dim i As Long '該当Sheetカウントアップ用(配列サイズ変更)
ActiveSheet.UsedRange.Clear
For Each ws In Worksheets
With ws
If Not ws Is ActiveSheet And .Name <> "template" Then
Set r = .Cells.Find(What:="業務名", _
After:=.Cells(2, 2), _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
MatchByte:=False)
If Not r Is Nothing Then
Set rs = .Range(.Cells(r.Row, 3), .Cells(Rows.Count, 19).End(xlUp))
v = VBA.Array(rs.Address(1, 1, xlR1C1, True), .Name)
ReDim Preserve x(0 To i)
x(i) = VBA.Array(v(0), v(1))
i = i + 1
Set r = Nothing
Set rs = Nothing
End If
End If
End With
Next ws
'ピボット計算-------
With ThisWorkbook.PivotCaches.Add(SourceType:=xlConsolidation, _
SourceData:=x) _
.CreatePivotTable(TableDestination:=Range("A11"), _
TableName:="ピボットテーブル1")
.DataFields(1).Function = xlSum
End With
End Sub
ちなみに検索範囲がC列限定なら、データ範囲を確定させる部分は下記でも。
Set r = .Columns("C").Find(What:="業務名", _
After:=.Cells(3), _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
MatchByte:=False)
Set rs = .Range(r, .Cells(Rows.Count, 19).End(xlUp))
pauNedさん
こんばんは。
できました!
ありがとうございました!
データ型としてrangeを指定したり、VBA.Arrayなどは
本には載っていないし、初心者には難しい部分だったようですね。
大変勉強になりました。
教えていただいたソースは全て理解はまだできていませんが
じっくり考えて理解して使えるようになりたいと思います。
自分の書いたソースは回りくどく、美しくありませんでしたが
こんなにすっきりと簡潔にできるのですね。
本当に、どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
表にフィルターをかけ、絞った...
-
EXCEL VBA 2次元配列に格納さ...
-
VC#で配列の値の重複チェックに...
-
エクセルで、絶対値の平均を算...
-
SUMPRODUCT関数を用いた最小値
-
Split関数でLong配列に格納する...
-
Excel VBA 配列の分割について
-
array関数で格納した配列の型を...
-
VBA array()関数 配列の使い方...
-
数字をコンマで区切った文字列...
-
C#でFontStyleの列挙体に値を追...
-
VBAで指定期間の範囲を抽出し、...
-
VB6.0 ファイルの一括読込み
-
配列がとびとびである場合の書き方
-
[VBA]改行入りのセルの値を配列...
-
エクセルの配列数式、配列定数...
-
エクセル2007 VBA シート内のデ...
-
[エクセル]連続する指定範囲か...
-
ExcelのINDEXとMATCH関数でスピ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
表にフィルターをかけ、絞った...
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
[VBA]改行入りのセルの値を配列...
-
Excel オートフィルタのリスト...
-
DataSetから、DataTableを取得...
-
iniファイルのキーと値を取得す...
-
配列のSession格納、及び取得方...
-
エクセルでエラーを無視して一...
-
Dictionaryを使い4つの条件の一...
-
エクセル 条件を指定した標準...
-
読み込みで一行おきに配列に格納
-
For Nextマクロの高速化につい...
-
.NET - 配列変数を省略可能の引...
-
SUMPRODUCT関数を用いた最小値
-
VB6.0 ファイルの一括読込み
おすすめ情報