• ベストアンサー

エクセルで作った表へ自動入力したい

例えば、100世帯のマンションがあります。エクセルの行に001~100までの世帯番号を、列に何月分かを列記した管理表を作ります。 別のシートに、例としてM1に世帯番号を、M2に貰った家賃が何月分かを、M3に家賃を貰った日付を入力して日報を作ると、自動的に管理表の座標を探してM3の日付が入力するようにしたいと質問したら、 一般機能では無く、マクロ処理になりますね。 1.[Alt]+[F11] で Visual Basic Editor を起動し、[挿入]-   [標準モジュール] で開く画面に、次の3行をコピペします。   Sub TEST()    Range(Range("M1") & Range("M2")) = Range("M3")   End Sub 2.M列各セルに、次の内容を入力します。   M1:列記号を入力( 入力例:C )   M2:行番号を入力( 入力例:4 )   M3:データを入力( 入力例:テスト ) 3.[ツール]-[マクロ]-[マクロ] から TEST を選択して実行します。     →C4に テスト と入力されます。   M1:M3 に入力してマクロを実行するたびに、指定されたセルに書き込まれます。 との答えを頂きました。しかし日報の様に使いたいので、M列だけで無くN、L、Oと列記して次々と管理表に入力出来る様にしたいのです。どの列でも、1に世帯番号を、2に何月分かを、3に領収日を入力すれば、自動的に管理表に入力されるようにしたいのです。宜しくお願いします。

noname#20141
noname#20141

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

過去の回答を横においておいて、下記をやってみてください。 ーーーーーー <管理表>Sheet1 下記例では1-4月までにしてます。 C1に1、D1に2、C1:D1を範囲指定し+ハンドルをオートフィルで引っ張って1から12まで入れる。1年12か月分。書式はユーザー定義「#月分」にする。 A1からA100まで所帯番号を入れる。B2に番号に対応した所帯主名(または姓)を入れる。 C2:N100の書式は、日付書式を設定する。 (例)日付は下記処理結果 1月 2月 3月 4月 1 山田 2006/2/4 2006/2/4 2 大木 2006/2/4 3 小川 2006/2/4 5 鈴木 2006/3/1 7 田中 ーーーー <収納(受入)日報> Sheet2 (例) 1 2 3 4 5 世帯番号 1 3 2 1 5 名前 山田 小川 大木 山田 鈴木 何月分 2月分 4月分 2月分 1月分 3月分 日付 2006/2/4 2006/2/4 2006/2/4 2006/2/4 2006/3/1 記帳 記帳済 記帳済 記帳済 記帳済 記帳済 第1行 連番を振る(なくても可。 第2行 収納した所帯番号を入力する。 第3行目 B3に =IF(B2="","",VLOOKUP(B2,Sheet1!$A$2:$B$7,2,FALSE)) を入れて右方向に式を複写する。 所帯の名前をSheet1から引っ張ってきて、表示する。 第4行目 何月分か入力する。書式はユーザー定義 「##月分」 第5行目 収納日を入力。当日なら、CTRL+;が便利。 第6行目 記帳済とVBAで表示する。 Sheet2のシートモジュールで SelectionChangeイベントモジュールに Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row = 6 Then r = WorksheetFunction.Match(Target.Offset(-4, 0), Worksheets("Sheet1").Range("a1:A100"), 0) c = Target.Offset(-2, 0) Worksheets("Sheet1").Cells(r, c + 2) = Target.Offset(-1, 0) MsgBox "記帳済" Target = "記帳済" End If End Sub を貼り付ける。 MsgBox "記帳済" は要らないかも。 やっていることは、 所帯番号で、Sheet1の行を探し、n月分からC=N+2を決め、 Sheet1のCells(r,c)セルに収納日をセットしている。 あとチェックルーチンなどを加えると、増えるが、原型としては 他と比べて、短いはずです(実質たった7行)。

noname#20141
質問者

お礼

同じような質問を何度もして、その度に回答を寄せていただいてありがとう御座います。良く分からないこともあり気分を害されたかも知れません。本当に済みませんでした。補足でも言ったのですが、一つの売り上げ(Sheet2で)を、A列に連番、B列に世帯番号、C列に名前、D列に何月分、E列に日付、F列に記帳、と行と列を入れ替えるのに試行錯誤してお礼も遅くなりました。その中で多少分かったこともあり、勉強になりました。ありがとう御座いました。

noname#20141
質問者

補足

大変申し訳ありません。実用化するのに一ヶ月掛かってしまいました。できれば、Sheet2の列と行を入れ替えられれば、更に使い易くなりそうです。我儘言ってすみませんが教えてください。宜しくお願いします。

その他の回答 (3)

noname#22222
noname#22222
回答No.3

入力するシートのラベルを右クリックして[コード]の表示をクリックします。 次のコードをコピーします。 Private Sub Worksheet_Change(ByVal Target As Range) End Sub の部分は、コピーしないで[Worksheet]-[Change]を選んで自動生成させて下さい。 (注意)エラー処理が完璧ではありませんので、入力ミスの場合は注意が必要です。 Option Explicit Dim isInput As Boolean    ' True=入金日入力中、False=入金日非入力中 Dim R As Integer        ' 選ばれた行番号 Dim C As Integer        ' 選ばれた列番号 Dim dteHiduke_Now As Date ' 入力される[入金日]の既定値 Dim dteHiduke_New As Date  ' 新しく入力された[入金日] Const 入金日入力行 = 3    ' [入金日]を入力する行の番号 Const 入金日開始列 = 13    ' [入金日]を入力する列の開始番号 Const 入金日終了列 = 112   ' [入金日]を入力する列の終了番号 Const 更新行_Offset = 1     ' 入力する[世帯行番号]と更新行との差 Const 更新列_Offset = 1     ' 入力する[何月分]と更新列との差 Private Sub Worksheet_Change(ByVal Target As Range) ON Error Resume Next   Dim Update_R As Integer   Dim Update_C As Integer      If isInput Then     If Len(Cells(R, C) & "") > 0 Then       dteHiduke_New = Cells(R, C)     Else       dteHiduke_New = "1900/01/01"     End If     If dteHiduke_New <> dteHiduke_Now Then       Update_R = Cells(R - 2, C) + 更新行_Offset       Update_C = Cells(R - 1, C) + 更新列_Offset       If dteHiduke_New <> "1900/01/01" Then         Worksheets("家賃管理表").Cells(Update_R, Update_C) = dteHiduke_New       Else         Worksheets("家賃管理表").Cells(Update_R, Update_C) = ""       End If     End If   End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) ON Error Resume Next   R = Target.Row   C = Target.Column   If R = 入金日入力行 And (C >= 入金日開始列 And C <= 入金日終了列) Then     isInput = True     If Len(Cells(R, C) & "") > 0 Then       dteHiduke_Now = Cells(R, C)     Else       dteHiduke_Now = "1900/01/01"     End If   Else     isInput = False   End If End Sub

回答No.2

まず、Rangeコマンドではセルの指定が大変です。 Cells(行、列) Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2006/2/4 ユーザー名 : ' Dim gyo As Integer Dim tuki As Integer Dim hi1 As Integer Dim hi2 As Integer Dim hi3 As Integer For i = 1 To 3 Sheets("data").Select gyo = 0 tuki = 0 hi = 0 gyo = Cells(i + 1, 1) MsgBox (gyo) If (Not gyo) Then tuki = Cells(i + 1, 2) MsgBox (tuki) hi1 = Year(Cells(i + 1, 3)) hi2 = Month(Cells(i + 1, 3)) hi3 = Day(Cells(i + 1, 3)) MsgBox (hi) Sheets("hyou").Select Cells(gyo, 2) = tuki Cells(gyo, 3) = (hi1) Cells(gyo, 4) = (hi2) Cells(gyo, 5) = (hi3) End If Next i 9000 End Sub dataというシートに何号の何月分をいつといった感じ のシートを用意し hyouというシートに1から100世帯といった感じ。 以上です。

noname#22222
noname#22222
回答No.1

<集金データ入力表> [入力列名前]_______M___________|________N___________|_______O___________|________P___________|・・・ [家賃の月次]___________________2|___________________2|___________________2|___________________2|・・・ [世帯別番号]___________________1|___________________2|___________________3|___________________4|・・・ [入金年月日]___2006/02/10|___2006/02/10|____________________|_____________________|・・・ このような<集金データ入力表>を用意し、[入金年月日]が入力する。 そうすると、次のような<マンション家賃管理表>に自動的に転記される。 <マンション家賃管理表> [世帯行番号] ______1月分_____| ______2月分_____| ______3月分_____| ________________1|___2006/01/20|__2006/02/10|_____________________| ________________2|___2006/01/20|__2006/02/10|_____________________| ________________3|___2006/01/22|____________________|_____________________| 質問は、このように解釈して宜しいでしょうか? <確認> ・入力後に、いちいちマクロを操作するのは手間だと思います。 ・ですから、VBAで[入金年月日]を監視し、それが更新されたら<マンション家賃管理表>も更新されるという仕組みが最適かと思います。 ※Excel は、一度しか利用したことのない門外漢ですが、これは私にも可能なようです。 ※質問者は、当方が提示したモジュールコードをコピーするだけでOKと思われます。 ※こういうやり方でよければ、ちょこっと作成してみようと思います。

noname#20141
質問者

お礼

有難う御座います。その通りです、でも私にはそんなに簡単でもないですけれど、助かります。

関連するQ&A

  • 表の座標への入力

    例えば、100台の駐車場で月極料金の入金状況を管理する表を作ります。行には、駐車番号、列には何月分と言った具合です。その上で、別のシートに日報として一日の売り上げを列記していきます。その一行の中で駐車番号、何月分、日付を入力する位置(列)を決めておいて、管理表の座標を探し日付を入力出来るようにしたいのです。リンク付けの関数なのか、プログラムを組むほど難しいことなのか方法を教えて下さい。   

  • 表の入力を自動的に改行したい

    office2007,W7 のユーザーです。 大きいエクセル表を作っております。N列M行の表のデータを入力するとき、第1列の全セルの入力を終わり、次行のデータを入力する際、アクチブセルが自動的に次行先頭セルに移るようにすることはできないでしょうか。範囲指定して反転したセルの 第1セルから始めることはできますが、表の記入を中断したのち再開すると、アクチブセルがまた第1列第1行に戻ってしまって、前回の入力の続きができません。 よろしくお願いします。

  • エクセルで縦に一定数 ほかのセルのデータを繰り返し 入力 の方法

    あるデータがあり、そのデータの一つ一つを3つずつ縦に並べて入力したいのですが、1行目 =M1 2行目 =M1 3行目 =M1 4行目 =M2 5行目 =M2 6行目 =M2 7行目 =M3・・・・・・と入力してフィル入力すると、うまくいきません。どうしたらよいでしょうか? 

  • エクセルで自動で日付と時間を入れることはできますか?

    こんにちは、今現在  A列に 日付 B列に 日時 C列に管理番号を入力しています。 Ctrl+;とCtrl+:を使って 日付と日時を入力しているのですが C列に管理番号を入力したらA列とB列に自動で入力される マクロもしくはVBAは可能でしょうか? ご存知の方いらっしゃいましたら、ご教示ください。 m__m

  • エクセル表からの取り出し条件

    こんにちわ。エクセルで作成した表がありまして、そこから取り出しにご協力をいただけないでしょうか。 B列はナンバーと空白でできています。 B列のナンバーを基準に、M列にあるテキストを取り出したいのですが、 B列空白の行は無視したいのと、B列にナンバーが入力されている場合でも そのすぐ下が空白の場合は、そのナンバーは取り出さないようしたいのです。 下記の例ですと、取り出す行は16が入力されている行のみにしたいのです。 行数がめちゃくちゃ多いので、助けていただけるとありがたいです。 宜しくお願い致します。 B列    M列 10    りんご       ばなな       まぐろ 16    さんま 20    きゃべつ       みかん

  • ある操作後に自動的にセルに斜線を入れるには?

    Excelで、管理表、対応表という2つのシートを作成していますが、T列に処理という欄を設けて、ここに入力規制のリストで○か×かを選択するようにしているのですが、ここの処理のある行のセルに○が入ると、その行にあるM列からU列までのセルに斜線もしくは-が、自動的に入るようにしたいのですが、マクロ処理でできますでしょうか?できるのであれば、教えて下さい。

  • エクセルの表で自動的にリンクを貼れますか?

    表の行に番号をうちその列の1つに、自分のPCにあるフォルダ内に行の番号を名前として保存しておいたファイルを自動的にリンクされるような設定はできますか?

  • エクセルで、次のような自動入力をしたい

      A    B    C    D   E  ・・ AA 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)

  • アルゴリズム(行列積)

    行列M1,M2,M3,M4が以下の数の行、列を持つ行列としたとき、行列積M1,M2,M3,M4をもっとも少ない演算回数で計算するには、どの順序で計算すればよいか? M1:20行60列 M2:60行5列 M3:5行20列 M4:20行100列 全くわかりません(>_<)みなさま手取り足取り教えてくださいm(__)m

  • エクセルの自動入力を

    今、手元にエクセルで作った一覧表が有ります A列には「入荷日」 B列には「製品番号」 C列には「製品名」 D列には「大きさ(重量)」 E列には「担当者」 が入っていて、全部で約25000行ほどの一覧表です。 入荷日の欄<A列>には =TODAY() の関数式が入っており、自動で入力されます。 (最後のコピー→テキストで貼付けをする) 製品番号,製品名,大きさ,担当者は関連しているため 製品番号を入力すれば他が自動で入る仕組みになっていました。 例えば製品名の所には =VLOOKUP(B25633,B:E,2,FALSE) といった感じで、B25633のセルの製品番号から製品名を自動記入 していました。 しかし最近になり担当者が変わってしまったのですが、この関数では いまだに過去の一番古い担当者を自動入力してしまいます。 上から検索が行われているためだと思うのですが、 一番最近のデータ(画面で言う下)から検索を行い 自動入力をする方法って、他には無いんでしょうかお願いします。

専門家に質問してみよう