6

簡単なリストがあります:

  A     B
item1   3
item2   2
item3   4
item4   1

出力する必要があります:

  A
item1
item1
item1
item2
item2
item3
item3
item3
item3
item4
4

2 に答える 2

14

VBA を使用しない方法の 1 つを次に示します。

  1. A の左側に列を挿入すると、現在の A 列と B 列が B と C になります。
  2. 1A1に入れる
  3. A2に入れ=A1+C1てA5にコピー
  4. 'セルに一重引用符 ( ) を入力するだけで、B5 に空の文字列を入力します。
  5. 1E1 に a 、E2 に a を入れ、2下にコピーして 1, 2, ..., 10 を得る
  6. F1を入れ=VLOOKUP(E1,$A$1:$B$5,2)てコピーダウン。

次のようになります。

| A  | B     | C | D | E  | F     |
|----|-------|---|---|----|-------|
| 1  | item1 | 3 |   | 1  | item1 |
| 4  | item2 | 2 |   | 2  | item1 |
| 6  | item3 | 4 |   | 3  | item1 |
| 10 | item4 | 1 |   | 4  | item2 |
| 11 |       |   |   | 5  | item2 |
|    |       |   |   | 6  | item3 |
|    |       |   |   | 7  | item3 |
|    |       |   |   | 8  | item3 |
|    |       |   |   | 9  | item3 |
|    |       |   |   | 10 | item4 |
于 2012-08-07T07:57:45.123 に答える
1

これがVBAソリューションです。VBAが動的ではないというコメントはよくわかりません。数式のように、作成するのと同じくらい動的です。このマクロはSheet1のすべてのデータを消去し、新しい出力に置き換えることに注意してください。別のシートに目的の出力が必要な場合は、参照を変更しSheet2てください。

Option Explicit

Sub MultiCopy()

Dim arr As Variant
Dim r As Range
Dim i As Long
Dim currRow As Long
Dim nCopy As Long
Dim item As String

'store cell values in array
arr = Sheet1.UsedRange
currRow = 2

'remove all values
Sheet1.Cells.ClearContents
Sheet1.Range("A1") = "A"

For i = 2 To UBound(arr, 1)
    item = arr(i, 1)
    nCopy = arr(i, 2) - 1
    If nCopy > -1 Then
        Sheet1.Range("A" & currRow & ":A" & (currRow + nCopy)).Value = item
        currRow = currRow + nCopy + 1
    End If
Next

End Sub
于 2012-08-07T15:02:04.303 に答える