web-dev-qa-db-ja.com

データのグループの後に空白行を自動的に挿入する方法

以下のサンプルテーブルを作成しました。これは、Excelのテーブルとほぼ同じで、質問を説明するのに役立つはずです。 column1の個別のデータの後に行を追加するだけです(最も簡単な方法、Excelを使用、ありがとう)。

_

現在の表:

column1   |   column2   |  column3
----------------------------------
  A       |     small   |  blue
  A       |     small   |  orange
  A       |     small   |  yellow
  B       |     med     |  yellow
  B       |     med     |  blue
  C       |     large   |  green
  D       |     large   |  green
  D       |     small   |  pink

_

希望のテーブル

注:各個別の列の後の空白行1

column1   |   column2   |  column3
----------------------------------
  A       |     small   |  blue
  A       |     small   |  orange
  A       |     small   |  yellow

  B       |     med     |  yellow
  B       |     med     |  blue

  C       |     large   |  green

  D       |     large   |  green
  D       |     small   |  pink
5
Ben

これはあなたが求めていることを正確に行い、行をチェックし、空の空行を挿入します列Aの各変更で

sub AddBlankRows()
'
dim iRow as integer, iCol as integer
dim oRng as range

set oRng=range("a1")

irow=oRng.row
icol=oRng.column

do 
'
if cells(irow+1, iCol)<>cells(irow,iCol) then
    cells(irow+1,iCol).entirerow.insert shift:=xldown
    irow=irow+2
else
    irow=irow+1
end if
'
loop while not cells (irow,iCol).text=""
'
end sub

それがあなたを始めることを願っています、私たちに知らせてください!

フィリップ

17

列ラベルを含む配列を選択し、データ>アウトライン-小計、各変更:column1、関数を使用:カウント、小計を次に追加:column3、現在の小計とデータの下の要約を置換、OKをチェックします。

Column1、Text Filters、Contains ...、Count、OKをフィルタリングして選択します。ラベル以外のすべての表示を選択して、コンテンツを削除します。フィルタを削除し、必要に応じて行のグループ化を解除します。

1
pnuts

データがシーケンシャルでない場合(1 2 3 4が5 7 3 1 5)、これはソートできないため、これは機能しません。

私がこの問題を解決する方法は次のとおりです。

列各数値の間に5行を含む必要がある初期データ-5 4 6 8 9

列B-1 2 3 4 5(最終番号は、列Aの数字の間にある必要がある空行の数を表します)列Aに数字がある限り、列Bに1-5をコピーして貼り付けます。

D列にジャンプし、D1に1を入力します。D2に次の式を入力します-=IF(B2=1,1+D1,D1)列Bと同じ長さにドラッグします。

列Cに戻ります-C1セルでこの式を入力します-=IF(B1=1,INDIRECT("a"&(D1)),"")。下にドラッグして完了しました。これで、列Cには、列Aと同じ一連の番号が4行ずつ個別に分散されます。

1
Arunas

理解した。

ステップ1

Column1の左側に新しい列を配置し、次の式をコピーして貼り付けます

= B2 = B3

= B3 = B4

= B4 = B5

...一番下まで(ここの列Bは元の質問の列1であると仮定します)。

この式は、次の行がcolumn1の新しい値であるかどうかを評価します。結果に応じて、TRUEまたはFALSEになります。これらの結果をコピーして値として貼り付け、nilの「FALSE」と0.5の「TRUE」を交換します

ステップ2

次に、0.5だけで満たされた列をcolumn1に追加すると、次の表が生成されます。

_  newcolumn0  |   column1 ("B") |   column2   |  column3
-----------------------------------------------------
              |     1           |     small   |  blue
              |     1           |     small   |  orange
      1.5     |     1           |     small   |  yellow
              |     2           |     med     |  yellow
      2.5     |     2           |     med     |  blue
      3.5     |     3           |     large   |  green
              |     4           |     large   |  green
      4.5     |     4           |     small   |  pink
_

ステップ3

最後に、newcolumn0の値をcolumn1の値のすぐ下にコピーして貼り付け、column1でテーブルを並べ替えます。column1の各整数の間に空白行があり、テーブルは次のようになります。

_    newcolumn0   |  column1 ("B")  |   column2       |  column3
---------------------------------------------------------------
                 |     1           |     small   |  blue
                 |     1           |     small   |  orange
        1.5      |     1.5         |             |
                 |     1           |     small   |  yellow
                 |     2           |     med     |  yellow
                 |     2           |     med     |  blue
        2.5      |     2.5         |             |
                 |     3           |     large   |  green
        3.5      |     3.5         |             |
                 |     4           |     large   |  green
                 |     4           |     small   |  pink
        4.5      |     4.5         |             |
_

代替ソリューション(まだVBAはありません)

  1. 1列1行2の値を入力します(これがA2であると想定)
  2. この式をA3 =IF(B3=B2,A2,A2+1)に入れ、列2の残りに対してこの式をコピーして貼り付けます
  3. 次に、列1のすべての値を新しい一時Excelシートにコピーして貼り付け、重複を削除してから、すべての数値に0.5を追加し、列1のデータの下の元のスプレッドシートの値の下にこれらの値を貼り付け、列のすべてのデータを値を入力し、その列で並べ替え、一時Excelシートを削除します
0
Ben

上記の小、中、大などのカテゴリを知っているなら、ただのアイデアです...

シートの下部で、小、中、大と言うだけの3行を作成し、フォントを白に変更してから、アルファベット順に並べ替えて、各セクションの間に空白行を配置します。

0
Megan
  1. テーブル「Control」の左側に列を挿入します
  2. データに1〜1000の番号を付けます(1000行があると仮定)
  3. キーフィールドを別のシートにコピーして重複を削除する
  4. 1000番目のレコードの後、一意の行項目をメインシートにコピーします
  5. 「コントロール」列で、すべての一意のレコードに番号1001を追加します
  6. データ(追加されたレコードを含む)を、最初にキーフィールドで、次に「コントロール」で並べ替えます
  7. 空白行(キーフィールドのデータと「コントロール」を含む)が追加されます
0
Kartik Kumar