• ベストアンサー

セルに自動的入力させたい

EXCEL2010を使用しています。 「表1」のような表があるのですが、D列が「子」である、C列のオレンジの部分が空欄なので 手動で入力しないといけません。 条件は装置名が同じである「親」と同じ日付が入ります。 なので結果は「表2」のようになります。 これを関数かVBAで自動的に入力されるようにできないでしょうか? もし関数できたとしてもC列には予め数字が入っている行があるので 空欄に飛び飛びで数式を設定するしかないでしょうか? 何か良い方法があればよろしくお願いします。

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

  • ベストアンサー
  • shintaro-2
  • ベストアンサー率36% (2266/6244)
回答No.1

自動化は誰かにお願いするとして step1 親子でソート step2 装置名でソート step3 日付列を選択 step4 空白セルにジャンプ(CTRL+G → セル選択→空白セル) step4 日付の下の空白に =を入力してカーソル↑を押す。  そうすると、空白セルがc8とすると=c7と入力されるので CTRL+リターン  これで空白セルは全部一つ上のセルと同じ値が入ります。

akaneco-iland
質問者

お礼

shintaro-2さん、ありがとうございました。 うぁ~?理屈はよくわかりませんがうまくいきました。 最初の順番に戻すため通し番号の列を作っておきましたが、この手順のまま並べ替えをしてしまうと 数値が狂ってしまうので日付の列をすべて「値」で貼り付けてから行いました。 中々覚えにくい手順ですが、ほかの時にも使えそうです。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! やはりVBAになってしまいますけど・・・一例です。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペースト → Excel画面に戻ってマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) 尚、Sheet2を作業用のSheetとして使用していますので、Sheet2はまっさらな状態にしておいてください。 Sub Sample1() 'この行から Dim i As Long, c As Range, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") wS1.Range("A1").AutoFilter field:=4, Criteria1:="親" wS1.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy wS2.Range("A1") wS1.AutoFilterMode = False For i = 2 To wS1.Cells(Rows.Count, "A").End(xlUp).Row If wS1.Cells(i, "C") = "" Then Set c = wS2.Range("B:B").Find(what:=wS1.Cells(i, "B"), LookIn:=xlValues, lookat:=xlWhole) With wS1.Cells(i, "C") .Value = c.Offset(, 1) .NumberFormatLocal = c.Offset(, 1).NumberFormatLocal End With End If Next i wS2.Cells.Clear End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

akaneco-iland
質問者

お礼

tom04さん、ありがとうございました。 Sheet2に参照用?の表ができ、空欄セルに日付は入りましたが、 実行時エラー91 オブジェクト変数またはwithブロックが設定されていません。 のエラーメッセージが出ます。 ただ、正しい日付は入りましたし、他にもたくさん回答をいただきましたので今回はこのまま閉めさせて いただきます。 皆さん、たくさんの回答ありがとうございました! ベストアンサーは悩ましいところでしたが、最初に回答をくださったことと、自動的ではないけど簡単な方法だった ということでshintaro-2さんとさせていただきます。 ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

現在のリストにご希望のデータを表示する数式をまとめて入力するなら以下のような手順になります。 C列のデータ範囲を選択し、Ctrl+Gでジャンプダイアログを出し、「セル選択」から「空白セル」にチェックを入れ「OK」し、そのまま画面上部の数式バーを選択し、そこに以下の数式(例示のデータでは一番上の空白セルが5行目なのでB5セルを参照する)を入力し、Ctrlキーを押しながらEnterしてください。 =INDEX($C$3:$C$20,INDEX(MATCH(B5&"親",$B$3:$B$20&$D$3:$D$20,0),)) 実際の運用では、最初にこの数式(条件以外はIF関数で空白表示)を入力しておき、D列に「親」や「子」と入力すると自動的にC列の数式に上書きしたデータを参照するようにした方が良いような気もします。

akaneco-iland
質問者

お礼

MackyNo1さん、ありがとうございました。 うまくいきました。 >実際の運用では、最初にこの数式(条件以外はIF関数で空白表示)を入力しておき、 この表は「子」が空欄状態で関連会社からもらうものなので予め数式を入れることはできません。 「空白セル」にだけ数式を入れる方法はこれからも使えそうなテクニックですのでぜひ覚えておきたいと思います。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 手入力で値を入力したり、入力されている値を消去したりする場合があるC列に対して、値を自動入力するには、ワークシート関数では無理で、VBAを使う事になります。(ワークシート関数では、C列の値を書き換えたり、消去したりする際に、関数を消してしまう恐れがあります)  質問者様の添付画像の例では、B装置の納入日が入力されているセルが、装置名が「B装置」となっている行の中で最も下の行となっている事から考えますと、空欄に入れるべき日付は、必ずしも直上の行の日付であるとは限らない事になります。  又、複数種類の装置が同時期に納入される可能性も無いとは言えませんから、空欄に入れるべき日付は、日付が入力されている行の中で最も近い行に入力されている日付であるとは限らないと思われます。  そうなりますと、同じ装置名の中で日付が入力されている所から、日付を引っ張って来るしか方法は無く、そうしますと、もしも、同じ装置名で納入日が異なるものがあった場合には、空欄にどの日付を入れるべきかを判断する術は無いという事になります。  従って、表中の全ての行に亘って、同じ装置名が入力されている全ての行において、納入日は全て同じ日となっている(同じ装置名で納入日が異なるものは存在しない)ものとして考えなければ、自動化は不可能という事になりますので、万が一、同じ装置名で納入日が異なるものがあった場合には、その装置名で日付が入力されている行の中で、最も上にある行に入力されている日付を、その装置名の中で納入日が空欄となっている箇所にに入力すべき日付として、一律で採用する事に致しますが、それで宜しいでしょうか?  もし、それで宜しければ、以下の様なVBAのマクロとなります。(表の行数が多い場合においても動作速度を速くするために、1行ごとの繰り返し処理は行わずに、Y列とZ列に一時的にワークシート関数を入力してから、Z列の値をC列にコピーする方法としております) Sub Macro() Dim LR As Long LR = Application.WorksheetFunction.Match("*?", Range("B:B"), -1) Range("Y3:Y" & LR).FormulaR1C1 = "=IF(AND(RC2<>"""",ISNUMBER(1/RC3/DAY(RC3)),LEFT(CELL(""format"",RC3),1)=""D""),RC2,"""")" Range("Z3:Z" & LR).FormulaR1C1 = "=IF(RC2="""","""",IF(COUNTIF(C[-1],RC2),IF(RC3="""",INDEX(C3,MATCH(RC2,C[-1],0)),RC3),""該当無し""))" Range("C3:C" & LR).Value = Range("Z3:Z" & LR).Value Range("Y3:Z" & LR).ClearContents End Sub  尚、もしも、C列において空欄となっているセルの書式が、日付を表示する様になってない場合には、C列の日付を表示させるセルの書式の表示形式を、手動で[日付]にして下さい。  何故なら、C列における日付が入力されているセルの書式の表示形式は、必ずしも m"月"d"日" であるとは限りませんから、マクロの中で表示形式を指定しておく事は出来ませんし、さりとて、納入日が入力されているセルの書式を、そのまま他のセルにもコピーしてしまったのでは、セルの地の色やフォントの設定、罫線の設定等までコピーしてしまう事になりますので、例えば1行毎にセルの地の色を交互に変えて見やすくしていた場合や、罫線の一部を太枠にしていた場合などに不都合が生じる恐れがありますから、書式の方は手動で設定して頂いた方が話が簡単になるためです。

akaneco-iland
質問者

お礼

kagakusukiさん、ありがとうございました。 うまくできました。(日付の書式設定は必要でした) >一律で採用する事に致しますが、それで宜しいでしょうか? はい、かまいません。同じ装置名で納入日が異なるものはありません。 ただこの表はサンプルとして簡単にしたものなので、実際の表で使う場合はアレンジが必要ですね。 頑張ってみます。

関連するQ&A

  • Excelセルに条件付きの日付を入力したい

    B列5行目の日付を入力したときD列5行目の数字とその上の行にある数字が一致した右隣E列と日付の差が5日以上経過していればC列5行に"ー"を差が5日未満であればB列の日付に5日を足した日付を順々に入力したいのですがどなたか関数の解る方よろしくお願いします。 因みに環境はoffice2013です。

  • エクセル 関数を自動的に入力するVBAで困っています

    VBA初心者です。 エクセルの入力シートで行ごとにデータを下記のように入力しています。      A      B       C 1   日付    品番     商品 2   10/25    10     りんご 3   10/26    20     みかん 4 5 6 2行目から順にデータを入力すると自動的にC列にVBAで VLOOKUP関数をセットして商品を検索したいのですが 上手くできませんでした。 教えてください。よろしくお願いします。

  • EXCEL:ID番号の自動入力

    EXCEL:ID番号の自動入力 複数のシートに、 B列  C列 日付  案件 が入力されるファイルがあり、A列に自動的にID番号をふりたい と考えております。 可能であれば、B列の日付ごとに複数シートにわたって(シート毎のID ではなく、ファイル内で連番)ID番号が入力されればベストなのですが、 同日付の案件もあるのでそれはやはり関数では難しいでしょうか? また、B列に日付を入力された時点で、連番式にIDが入力されるVBA を組んだとして、その行を削除した場合、他のIDも自動的に一個前に詰める ように組むことはできますでしょうか? もしよい方法をご存知の方いらっしゃいましたら ご教示願えれば幸いです。

  • コード入力してセルを選択するマクロ

    お読み頂きありがとうございます。  A列にコードが並んでいて、先頭行には横に1~31の日付を表す数字が入っているEXCELシートがあります。コードは5桁で重複はありません。  この表でコード(ex.12345)と日付(ex.20)を指定することでそのコードと日付が交差する位置のセルを選択するマクロが作れるでしょうか。  例えば、マクロを実行するとコードと日付を入力するウインドを開いてコードと日付をそれぞれ入れる、あるいはコードと日付を組み合わせて(1234520)のように入力するとコード12345の20日に該当するセルを選択するようにしたいのですが。  当方、VBAの知識はほとんどない素人です。難しい解答が付いたらお礼も書けなくて困るな、と思いながら質問を書いている状態です。どうぞよろしくお願いします。

  • VBA 検索したセルに入力

    ExcelのVBAを使用して データの入力されたファイルに行列から検索したセルに数値を入力したいのです。 例えば、名前(行)と、日付(列) 2つの条件で、セルを検索し、該当するセルに、データ(数字とか)を 入力したいのです ------------------------------------  6/1 6/2 6/3 6/4 ・・・ a b c ・ ・ ------------------------------------ 例えば、A5に名前、B5に日付、データエリアがB10:Z20の場合 =INDEX(B10:Z20,MATCH(A5,A10:A20,0),MATCH(B5,B9:Z9,0)) で、該当するセルを探すことはできたのですが、 このセルに、データを入力したいときは、 ROWやCOLUMNで、行番号、列番号を取り出して Cellsで、入力すればいいのかな?と考えていますが もっと簡単にできるのでしょうか? (FIND関数は、使ったことがなく、どうなんだろう?と) それでいいよ とか、こっちの方が簡単 とかあれば、教えてください 

  • エクセルで行挿入した際、自動的に計算式も入力される方法を教えて下さい。

    例えば、A列は単価を入力する欄、B列には数量を入力する欄、C列には=A1*B1(1行目の場合)の計算式が入っている表があるとします。 表の途中で行挿入すると、自動的にCのセルに数式が入力される方法はありますでしょうか? 複数の人に毎月この表(実際はもっと列が多い表)に入力して貰って集計等をしているのですが、各個人で表の途中で行挿入して行を増やした際、数式がコピーされてない人がいるため、行挿入すると自動的に数式が入力される方法がないかと思っております。 エクセルのバージョンは2000又は2003、行挿入は必要なので、行挿入を禁止する事はできません。 宜しくお願いします。

  • エクセルでカウントした数を特定のセルに入力したい

    エクセルの関数について質問させてください。 A列  B列   C列 8/9       リンゴ 8/10      ミカン 8/11      リンゴ 8/12      ブドウ 8/13      ミカン 8/14      リンゴ 8/15      ブドウ 上記のような表で、C列でカウントしたリンゴの数を 前日の日付の行の、B列に入力したいのです。 ※今が8/10だとすると、リンゴの数「3」を  8/9の行のB列の欄に入力したい。 COUNTやCOUNTIFSで色々試してみたのですが、 どうしてもうまくいきません。 どうぞ宜しくお願いします。

  • 関数中にセルに入力した値を反映させて計算を行いたい

    こんにちは Excelを用いた計算を行っているのですが 自分の知識では出来なかったために皆様の知恵を借りたいと思っています Excelで単純な足し算を行いたいのですが とあるセルに入力した値によって計算範囲を変更したものを作りたいと考えています 仮にA行1列からA行20列まで各セルに1,23…20と順番に1つの数字が各セルに入力されていたとします この時, B行1列のセルに5という数字が入力されていたら C行1列にA行1列数字とA行5列の数字の和が入力される (イメージとしたら結果として1+5より6が出力される) B行1列のセルに10という数字が入力されていたら C行1列にA行1列数字とA行10列の数字の和が入力される (イメージとしたら結果として1+10より11が出力される) ような関数を作りたいと考えています 自身の甘い考えで B行1列のセルに5という数字が入力されていたら C行1列にA行1列数字とA行5列の数字の和が入力されるのは C行1列に=A1+A(B1)と入力したら出来るのではないかと考えていたのですが どうもできないみたいです なにか方法等浮かぶ方がいらしましたら回答をお願いします

  • Excel VBAで、空欄セルの場合に「なし」と自動的に入力するには?

    ExcelのVBAで、ある列(例えばC列)のセルでEnterキーを押したとき、 空欄の場合のみ、自動的に「無し」と入力するにはどうしたら良いでしょうか? VBA初心者です。よろしくお願いします。

  • Excel関数について

    Excel関数について Excel2003を使用しております。 B列に日付を入力しており、E列には数字を入力しております。 B列には必ず日付を入力しておりますが、E列には数字を入力していない場合もあり、 日付ごとにE列に入力した数字をカウントしたいのですが、 どのような数式を使用すれば確認出来るでしょうか? 日付ごとの数字の合計ではなく、あくまでもカウントになります。 ご教示頂きたく、何卒宜しくお願い致します。

専門家に質問してみよう