• ベストアンサー

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

表題の内容で、 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

  • エクセルのマクロで結合セルに値を貼り付けたい

    みなさん、お知恵をください。 Excel2000です。 Sheets(1)に A:D までを結合したセルを30行ぐらい用意した状態で Sheets(2)の 単一セル A1,A2,A3,A4,A5・・・・とつづく変数 HENSUUを 貼り付けたいのです。*HENSUUは値のみの文字であったり数字です。 もちろん下記の過去質問はチェック済みです。 http://oshiete1.goo.ne.jp/qa2197173.html 物まねで作成しましたがエラーです。 Sheets(2).Select HENSUU = Range("A65536").End(xlUp).Row  ’変数最終行定義 Sheets(1).Range(Cells(1, 1), Cells(HENSUU, 1)).Value = Sheets(2).Range(Cells(1, 1), Cells(HENSUU, 1)).Value すみません。お知恵を拝借させて下さい。 よろしくお願いします。

  • エクセルでセルの値が0になってしまいます

    エクセル2010を97互換モードで使っていますが以下の状況が起こっており原因がわかりません。 シート1のセルの式:='見積書(一般)'!E35:G35 その値:107,700 シート2のセルの式:='見積書(一般)'!E35:G35 その値:0 つまり、見積書(一般)というシートの同じセルの値をシート1、シート2に引いてくるだけなのにシート2の方はなぜか0になってしまうのです。どちらも表示形式は通貨です。 試しに見積書(一般)の別のセルに値を入れ、そのセルを参照させるとシート2でも正常に値が表示されます。 参照元(見積書(一般))のセルは連結されています。 原因と解決方法を教えてください。

  • エクセルで式の値を変えずにコピーする方法ありますか

    宜しくお願いします。 式が入った表などを別の場所にコピーをすると、その移動した分に応じて式の中身も移動してしまいますよね。(横に水平移動した場合、 A4*B4がD4*E4になる、など) 式の中身を変えずに他の場所にコピーをするためには どうすれば良いのでしょうか。式に全て絶対参照をつけておかなければ ならないのでしょうか(上の例でいけば、$A4$*$B4$など) 式の入った表をコピーした場合、値だけ貼り付けをして、式を再度入力するという手間の掛かることをしています。 どうすれば、式の値を変えずにコピーをすることができるでしょうか 教えてください。宜しくお願いします。

  • 表の特定の行、列の値を変数で保持する方法を探しています。

    お世話になっています。 以前 http://oshiete1.goo.ne.jp/qa3001732.html の質問をしたものです。 上記の質問は解決することが出来ましたが、同じような問題が生じたため再度質問させていただきます。 以前の質問では、INSERT文の中にSELECT MAX(列名)文をいれて、ある表の特定の行、列から値を取得しましたが、今回はある表の特定の行、列から1つの 値を取得し、変数に格納し保持するという方法を探しています。 漠然とした質問ではありますが方法など教えてくださる方お願いします。

  • エクセルのマクロで、セルの値を参照してジャンプ

    エクセルのマクロで、セルの値を参照して、 別シートにジャンプして貼り付けたいと思っています。 <Sheet1>  |  A  B  C ------------------------------------ 1|  A1  あ  100 2|  B5  い  50 3|  C7  う  80 4|  D3  え  20 5|  E9  お  40 <Sheet2>  |  A  B  C  D  E ------------------------------------ 1|  あ 2|  100 3|         え 4|         20 5|    い 6|    50 7|       う 8|       80 9|            お 10|            40 といったイメージです。(お分かり頂けますか?) Sheets1!B1:C1を選択し、A1のセルの値を参照して、Sheets2!A1にジャンプして、 行列入れ替えて貼り付ける、といったマクロを組みたいのですが、 セルの値を参照する部分が分かりません。 実際はSheets2の様なシートは複数あり、1つのリストから複数の形式を変えた表を 作りたいと思っています。 Sheets2以降のシートに見出し行を加え、VLOOK関数を組み込んだ表を作っておき、 結果を貼り付けて見出し行を削除する、といったマクロは組めるのですが、 セルを参照してジャンプして貼り付けてくれると便利だと思い質問させて頂きました。 どなたかお知恵を拝借できましたら嬉しいです。 宜しくお願い致しますm(_ _)m

  • Excelの空白セルを正しく認識しない

    数字と空白の入り交じった表Aと表Bのデータを加算して、新たに表Cを作ろうとしています。 普通に表Cのセルに、「表Aのセル」+「表Bのセル」を書き込めば良さそうなのですが、 一見すると空白に見える一部のセルを参照した式で#Valueのエラーが表示されてしまいます。 最初は、何か文字(空白記号など)が入っているのかと思い、調べたのですが、やはり、なにも入力されていないようです。 しかし、エラーとなっている式が参照しているセルでDeleteを押すと、エラーが解除されることは確認できています。 膨大なデータにランダムに数字が入っているので、 一個一個のセルをDeleteしていくのは非常に時間がかかるので、何かよい解決策をご存じの方がいらっしゃったら、知恵を貸してください。 ※ ちなみに、参照先になっている表は私が作った物ではなく、また0から作り直すことはできません…。

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

    セルの値分の個数の文字列を自動で入れたいのですが、 例 |い|3| |ろ|2| このような2行2列の表を作ることにより |い| |い| |い| |ろ| |ろ| のように「い」を3つ「ろ」を2つの1列に並んだ表にしたいのです。 すみませんが詳しい方に簡単な方法を教えていただければ幸いです。よろしくお願い致します。

  • 関数にセルの値が反映されません

    同じ形式の表を複数シートに作成して、その合算をする シートを作っているのですが、一部分だけ、元の表には 値が入っているのにSUM結果が「0」になってしまいます。 その元の値が入っているセルをダブルクリックすると、 関数に反映されるんですが…。 これって何か解決策はあるのでしょうか…。

  • エクセル 同じ値を見つける

    エクセル2003です。教えてください。 販売実績表があり、それを元に請求書を作成しています。 その販売実績表なのですが、ある月に発生したものすべてが請求が起きる訳ではなく、支払条件の関係で翌月に繰り越されるものがあります。 あとで請求漏れや二重請求が起きない様に、請求が起きたものは、手入力で”済”と入力していたのですが、件数が増えてきたので、そこでも間違いが起きないように関数でフラッグのようなものを立てられないかと考えました。 販売実績表で、請求書を参照して、IF(COUNTIF(請求書!A:M,F205)=1,"済","")という式を立てたのですが、問題が出ました。 検索条件になっている番号が、参照する請求書では2行以上あるものが空白で返されてしまうのです。もちろん、1を2にすればいいのですが。 ORを使えばいいのか、いまひとつわかりません。

  • ヘッドライト点かずで困ってます!

    僭越ながら カテ違いと思い、ここに移動しました。皆様のお知恵を授けてあげてください! 困っておられます。 私の、こんな行為はゆるされますか? http://oshiete1.goo.ne.jp/qa3362190.html

このQ&Aのポイント
  • プリンターのドライバーやソフトウェアが最新かどうか確認する方法を教えてください。
  • ドライバーの更新が必要かどうかを確認する手順を教えてください。
  • EPSON製品のドライバーが最新かどうかを簡単に確認する方法を教えてください。
回答を見る

専門家に質問してみよう