4

次のようなさまざまなブランドの市場シェアの膨大なデータがあります。

1111 2222 3333 4444
5555      7777 8888
9999 0001 0002
0004 0005 0006 0007

出力を取得するために使用できるマクロ コードは次のとおりです。

1111
2222
3333
4444
5555
<emptyCell>
7777
8888
9999
0001
0002
<emptyCell>
0004
0005
0006
0007

空のセルも考慮する必要があります。

また、他の Sheet で出力を取得する可能性はありますか?

4

4 に答える 4

6

INDEXプロセッサー負荷の低いバージョンに変更

データをコピーするシートの行1:

=INDEX($A$1:$D$4,INT((ROW()-1)/4)+1,MOD(ROW()-1,4)+1)

これをコピーして、ゼロが表示され始めたら終わりです。(これが唯一の問題です。空白のセルはこれでゼロになります。空白も保持したい場合は、これが必要です:

=IF(ISBLANK(INDEX($A$1:$D$4,INT((ROW()-1)/4)+1,MOD(ROW()-1,4)+1)),"",INDEX( $A$1:$D$4,INT((ROW()-1)/4)+1,MOD(ROW()-1,4)+1))

)

最初の行から開始しない場合は、 を に変更ROW()しますROW()-X。ここで、X は上から下の行数です (つまり、行 2 の場合は 1、行 3 の場合は 2、行 800
の場合は 799)。列の数が異なる場合、4を適切な数に変更します

于 2013-01-22T20:28:39.793 に答える
1

範囲が A1:D4 であると仮定すると、これを実行できる VBA マクロを次に示します (列 E に値を入力するだけです)。

Sub RangeToColumn()

Dim varray As Variant
Dim i As Long, j As Long, k As Long

Application.ScreenUpdating = False
k = 1

varray = Range("A1:D4").value
For i = 1 To UBound(varray, 1)
    For j = 1 To UBound(varray, 2)
        Cells(k, 5).value = varray(i, j)
        k = k + 1
    Next
Next

Application.ScreenUpdating = True

End Sub

工夫してディクショナリ オブジェクトを使用し、配列を列に転置することもできますが、これはより単純であり、ディクショナリ オブジェクトは Mac では機能しません。「Cells(k, 5)」の代わりに「Range("E" & k)」を使用することもできますが、Cells() は連結を必要としないため、わずかに高速です。

また、画面の更新をオフにすると、はるかに高速に実行されることに注意してください。

于 2013-01-24T20:08:01.397 に答える
1
Sub Makealist()

Application.ScreenUpdating = False

Dim rng As Range
' Destination of List
Worksheets("SomeWorksheet1").Activate
Worksheets("SomeWorksheet1").Range("SomeRange1").Select

' Range to Convert to list
Set rng = Worksheets("SomeWorksheet2").Range("SomeRange2")

' Makes sure that all "Blank cells are really Blank"
For Each c In rng.Cells
    If Len(c) = 0 Then
        c.Value = ""
    End If
Next

' Creates the list
For Each c In rng.Cells
    If IsEmpty(c.Value) = False Then
        Selection.Value = c.Value
        Selection.Offset(1, 0).Select
    End If
Next

Application.ScreenUpdating = True

End Sub
于 2018-04-16T15:17:08.213 に答える