[Excel VBA] 대량의 셀 값을 일괄 로드
Excel
여러 셀에 값을 한 번에 쓰기 의 엔트리의 반대로, 이번에는 대량의 셀의 값을 일괄로 읽어 보자.
이쪽도 Variant형의 2차원 배열을 사용합니다.
입력
100 열 1000 행 시트에 RANDBETWEEN 함수로 무작위 값을 넣고 값 붙여 넣기.
시트 이름은 "in"
출력
각 셀의 값의 행 번호, 열 번호 및 값을 출력한다. 1행째는 타이틀행으로 명세서는 2행째로부터.
시트 이름은 "out".
코드
포인트는 다음과 같습니다.
1. 출력용의 2차원 배열(Variant형.↓의 코드에서는 변수vout)를 만든다
2. 출력용의 2차원 배열에 값을 세트(1차원째가 행 방향, 2차원째가 열 방향)
3. 출력용의 2차원 배열과 행수, 열수가 같은 Range 객체(↓의 코드에서는 변수 rout)를 만든다.
4. 출력용 2차원 배열을 Range의 Value 속성에 설정합니다.
Excel 개체에 대한 액세스가 적기 때문에 빠릅니다. 1초가 걸리지 않습니다.
Option Explicit
Public Sub Flatten3()
Dim a As Excel.Application
Dim b As Workbook
Dim w As Worksheet
Dim rr As Range
Dim v As Variant
Dim i As Long
Dim j As Long
Dim wout As Worksheet
Dim rout As Range
Dim row As Long
Dim column As Long
Dim value As String
Dim vout As Variant
Dim rowCount As Long
Dim k As Long
Debug.Print Time & " - Flatten3 スタート"
''Workbook変数セット
Set a = Application
Set b = a.ThisWorkbook
''inシートの範囲指定
Set w = b.Worksheets("in")
Set rr = w.Range("A1")
Set rr = w.Range(rr, rr.End(xlToRight).End(xlDown))
''outシートのクリア
Set wout = b.Worksheets("out")
wout.Range("2:1000000").ClearContents
''outシートの初期位置をA1に。
Set rout = wout.Range("A1")
''100列1000行の値を一括してVariantに入れる→2次元配列になる。
Debug.Print Time & " - Flatten3 読み込み"
v = rr.value
Debug.Print Time & " - Flatten3 ループ+書き込み用配列作成"
''出力用の配列を定義。行数100*1000、列数3
rowCount = UBound(v, 1) * UBound(v, 2)
ReDim vout(1 To rowCount, 1 To 3)
''列方向のループ
For i = LBound(v, 1) To UBound(v, 1)
''行方向のループ
For j = LBound(v, 2) To UBound(v, 2)
row = i
column = j
value = v(i, j)
''出力用配列にセット
k = k + 1
vout(k, 1) = row
vout(k, 2) = column
vout(k, 3) = value
Next j
Next i
Debug.Print Time & " - Flatten3 配列から書き込み"
''A2を起点として、出力用配列と同サイズのRangeをセット
Set rout = wout.Range("A2").Resize(rowCount, 3)
''配列から一括書き込み
rout.value = vout
Debug.Print Time & " - Flatten3 終了"
MsgBox "終了!"
End Sub
Reference
이 문제에 관하여([Excel VBA] 대량의 셀 값을 일괄 로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jinka1997/items/209b665734cc16bf0db2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Option Explicit
Public Sub Flatten3()
Dim a As Excel.Application
Dim b As Workbook
Dim w As Worksheet
Dim rr As Range
Dim v As Variant
Dim i As Long
Dim j As Long
Dim wout As Worksheet
Dim rout As Range
Dim row As Long
Dim column As Long
Dim value As String
Dim vout As Variant
Dim rowCount As Long
Dim k As Long
Debug.Print Time & " - Flatten3 スタート"
''Workbook変数セット
Set a = Application
Set b = a.ThisWorkbook
''inシートの範囲指定
Set w = b.Worksheets("in")
Set rr = w.Range("A1")
Set rr = w.Range(rr, rr.End(xlToRight).End(xlDown))
''outシートのクリア
Set wout = b.Worksheets("out")
wout.Range("2:1000000").ClearContents
''outシートの初期位置をA1に。
Set rout = wout.Range("A1")
''100列1000行の値を一括してVariantに入れる→2次元配列になる。
Debug.Print Time & " - Flatten3 読み込み"
v = rr.value
Debug.Print Time & " - Flatten3 ループ+書き込み用配列作成"
''出力用の配列を定義。行数100*1000、列数3
rowCount = UBound(v, 1) * UBound(v, 2)
ReDim vout(1 To rowCount, 1 To 3)
''列方向のループ
For i = LBound(v, 1) To UBound(v, 1)
''行方向のループ
For j = LBound(v, 2) To UBound(v, 2)
row = i
column = j
value = v(i, j)
''出力用配列にセット
k = k + 1
vout(k, 1) = row
vout(k, 2) = column
vout(k, 3) = value
Next j
Next i
Debug.Print Time & " - Flatten3 配列から書き込み"
''A2を起点として、出力用配列と同サイズのRangeをセット
Set rout = wout.Range("A2").Resize(rowCount, 3)
''配列から一括書き込み
rout.value = vout
Debug.Print Time & " - Flatten3 終了"
MsgBox "終了!"
End Sub
Reference
이 문제에 관하여([Excel VBA] 대량의 셀 값을 일괄 로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jinka1997/items/209b665734cc16bf0db2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)