• ベストアンサー

エクセル初心者です。

エクセル初心者です。 質問の意味合いが不十分でしたら すみません。  A 1 あ 2 あ 3 い 4 う 5 う 6 え  と A列内にあった場合に  A 1 あ 2 あ 3 4 い 5 6 う 5 う 7 8 え  のように、行の文字が変わった場合に 空白行を挿入したいのですが、簡単な方法はありますでしょうか? マクロは良くわからないので、関数などで解決できたらと思っています。 不十分な説明とは思いますので、ご参考までに画像を添付させていただいています。 何卒、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

いろんな関数があって、いろんなことができますが、 関数(を使った数式)を入力したセルの値しか扱うことは出来ません。 配置を移動したりするのは、マクロじゃないと無理です。 質問者様がやりたいことは、以下のマクロでできます。 Sub test() Dim r As Long For r = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Cells(r, 1).Value <> Cells(r - 1, 1).Value Then Rows(r).Insert Next r End Sub

tanchinpon
質問者

お礼

ご教授、大変ありがとうございました。 教えていただいたように実行したところ、びっくり!! 完璧でした。 これを機会に、マクロを勉強してゆきたいと思います!! 大変ありがとうございました。 感謝いたします!!

その他の回答 (5)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.6

A列のA2セルから下方にデータがあるとします。 B2セルには次の式を入力して下方にオートフィルドラッグします。A9セルまでデータがあるとしたらその倍のセルまでA18セルまでドラッグコピーします。 =IF(ROW(A1)=1,1,IF(AND(A2<>"",COUNTIF(A$2:A2,A2)=1),MAX(B$1:B1)+2,IF(AND(A2<>"",COUNTIF(A$2:A2,A2)>1),MAX(B$1:B1)+1,IF(AND(A2="",ROW(A1)<MATCH("ー",A:A)),"",IF(OR(COUNTIF(B$1:B1,ROW(A1)+1-MATCH("ー",A:A))>0,(ROW(A1)+1-MATCH("ー",A:A))>MAX(B$1:B1)),"",ROW(A1)+1-MATCH("ー",A:A)))))) ここでMATCH("ー",A:A)の関数はA列で文字列が入力されている最下段のセルの行数を求めるものです。 B列を選択してコピーし、C1セルをアクティブセルにして「形式を選択して貼り付け」で「値」にチェックをして貼り付けます。C1セルがアクティブセルのままで昇順での並び替えを行います。 これによってA列には空の行が入った並びが出来上がります。 仮にその空の行にデータを入力した場合には空の行が無くなってしまいますが、再びB列を選択してからC列に形式を選択して貼り付けをし「値」にチェックをして貼り付けしてから昇順で並べることで再び空白の行を入れることができます。

tanchinpon
質問者

お礼

ご教授 ありがとうございました。 教えていただいた方法も含め、色々なアプローチがあるものだと勉強になりました。 これを機会に(特にIF関数)色々と学んでゆきたいと思います。 お時間いただき アドバイスしていただいて本当にありがとうございました!!

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

2行目と3行目で変わっているのは数式で求めることができますから、B2に○か何かをつけます。 ここまでは出来るとして 後は、B列に○があればその下に1行追加する、となりますが、マクロやVBAの対応のが有効です。 ○見つかったら行追加、次の○見つかったら行追加、の繰り返しです。ここはマクロやVBAに頼らず、一旦CSVに落として作業しても出来そうですが。 参考になれば。

tanchinpon
質問者

お礼

こんにちは、アドバイスありがとうございます。 CSVに落とす方法もあったのですね!! 参考になりました。 ありがとうございます!!!

  • qyukip
  • ベストアンサー率40% (13/32)
回答No.4

A列自体にとはいきませんが、A列のデータを他の列に表示することなら関数でも可能です。 例えばB列に表示する場合 B1→=A1 B2以降→=IF(OFFSET($A2,-COUNTBLANK($B$1:$B1),0)<>B1, IF(B1="",OFFSET($A2,-COUNTBLANK($B$1:$B1)+1,0),""), OFFSET($A2,-COUNTBLANK($B$1:$B1),0)) もしA列だけで行いたいのであればマクロで実行すべきですし、 この方法で行うのであればA列を非表示にしてしまえば問題ないかと思います。

tanchinpon
質問者

お礼

ご回答、感謝いたします!! 早速 試させていただだいたところ、上手く実行できました。 教えていただいたIF関数を含め、マクロもこれを機会に勉強してみたいと思います。 言葉足らずではありますが、大変ありがとうございました!!

noname#204879
noname#204879
回答No.3

私みたいなマクロ音痴の「初心者」向けの回答例です。添付図参照 1.列Aの前に1列挿入 2.セル A1 から下方にズズーッと(列Bのデータ下端まで。添付図ではセル A6 まで)昇   順の連続数値を入力 3.1行空けて、セル A8 に次の配列数式を入力して、此れを下方にズズーッと(#NUM!エ   ラーが出るまで)ドラッグ&ペースト    {=SMALL(IF(B$1:B$6=B$2:B$7,"",A$1:A$6),ROW(A1))} 4.列A全体を選択したままで[コピー]→[値の貼り付け]を実行 5.列A、Bを選択して、[最優先されるキー]を列Aに指定して、[昇順]に[並べ替え] 7.列Aを削除

tanchinpon
質問者

お礼

ご丁寧に、画像までつけていただいて大変ありがとうございます!! 早速試してみました。 こういった方法もあるのかと、勉強になりました。 重ね重ね、ありがとうございました!!!

noname#119957
noname#119957
回答No.1

ワークシートのセルの内容を下にシフトしたり、 セルを動かすような操作は、マクロでないと無理ですよ。 ** 関数は固定された範囲のものを計算処理することしかできませんよオ~。

tanchinpon
質問者

お礼

早々のご回答、感謝いたします!! そうですか、関数だと無理なようですね。 マクロを含め他の方法を検討してみます。 ありがとうございました。