• ベストアンサー

エクセルでセルの値分の個数の文字列を自動で入れたい(続)

表題の内容で、 http://oshiete1.goo.ne.jp/qa2826642.html の回答を頂きました。 やってみて、とりあえず解決したと思ったのですが 参照する表を移動するとうまくいきません。 (結果を算出する式の中の参照元を変更してもうまくできませんでした) 参照する表と結果の移動に耐えるやり方は無いでしょうか、 すみませんが再度お知恵を拝借できれば幸いです。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

> A1:B16の元となる表で、B16にだけ8(例)を入れても > 1つしかA16が出てしまいます。また、0(例)を入れても > 1つだけA16が出てしまいます。 すみません、このケースではうまくいきませんでした。数式をあれこれいじってみたのですが、数式ではどうしてもできなかったので、ユーザ定義関数を作ってみました。 Alt+F11でVBAの画面を開き、左側のツリーからブック名を選択し、右クリックから「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。 Function GetVal(Address As String, N As Integer) As Variant  Application.Volatile  Dim i As Integer, Count As Integer, Last As Integer  Dim R As Range  Set R = Range(Address)  Count = R.Offset(, 1).Value  Do While Count < N   Set R = R.Offset(1)   Count = Count + R.Offset(, 1).Value   If R.Value = "" Then    GetVal = ""    Exit Function   End If  Loop  GetVal = R.Value End Function 貼り付けたらVBAの画面は閉じてExcelの画面に戻り、文字を羅列するセルの先頭に、 =GetVal("A1",ROW(A1)) と入力し、下にコピーしてください。 表の範囲がE17:F32の場合は、 =GetVal("E17",ROW(A1)) です。表の範囲はE17から下に何行あってもかまいませんが、途中で空白セルがあると、そこで表は終わりだと判定されます。 逆に、E32の直下のE33に何か文字が入っていると、それも表の一部だと認識されてしまいます。この仕様で不都合があれば補足をお願いします。

lovo
質問者

お礼

本当にありがとうございました。すばらしい技術に驚きました。 完璧に思い描いていた仕様通りです。 (お礼が遅れてすみませんでした) 自分も見習って、少しずつEXCELスキルをアップしたいと思います。 もし機会があればまた、ご教示願えれば幸いです。 ※ham_kamoさんのお悩みも解決されるよう、心から願っています。(プロフ見ました)

その他の回答 (2)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。 範囲がE17:F32の場合、G列を補助列、H列に一覧を出すとすると、 G17に =F17 G18に =SUM($F$17,$F$17:$F17) を入力して下にコピーし、H17に =IF(ROW(A1)>$G$32,"",LOOKUP($G$17+ROW(A1)-1,$G$17:$G$32,$E$17:$E$32)) と入力し、配列数式なのでCtrl+Shift+Enterで確定してください。 あとはそのセルを下にコピーすればいいです。

lovo
質問者

お礼

ありがとうございます、なんとなく動作は..わかってきました。(数式内容は全く理解できませんが...) 表を移動したときに結果を求めるD列の数式のROW(A1)のA1は動かしてはいけないんですね 配列数式の意味もわかっていないですがこれからWEBで勉強したいと思います。 最後にもうひとつだけ、すみません。 A1:B16の元となる表で、B16にだけ8(例)を入れても1つしかA16が出てしまいます。また、0(例)を入れても1つだけA16が出てしまいます。 これをなんとかしたいのですが、再度お知恵を拝借できませんでしょうか?、よろしくお願い致します。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

こんにちは、前回の質問のNo.2で回答した者です。 実際に使われてるのは私の回答でしょうか。それともNo.3の方の回答でしょうか。私の回答でしたら、参照する表をどの範囲に移動したのであればどう書き直せばよいか、回答できるのですが、補足をお願いできますか?

lovo
質問者

お礼

その節はどうもありがとうございました。 再度聞きたかったのですが、回答を締め切っていたので連絡の取りようが無くなってしまっていまして... 実際に教えていただいた2つ(お二方)の方法で試したのですがどちらもできませんでした。ham_kamoさんの方法での修正方法をおしえていただけると助かります。 A1:B16に前述のような表がある、補助列はC1:C128、結果をD1:D128 として教えていただいたものを作りました。 このとき、A1:B16の場所をE17:F32に変更したときに行うべき修正方法を教えていただけますか? 単にD1:D128数式の中の参照を変更しても無理でした(泣 すみませんがよろしくお願いします。    

関連するQ&A