文字を入力する方法と自動転送するVBAについての質問

このQ&Aのポイント
  • シート1の特定のセルに文字を入力し、それを別のシートの特定のセルに自動で転送する方法について教えてください。
  • また、同じような法則で複数のセルに文字を入力し、それを別のシートの複数のセルに自動で転送する方法も知りたいです。
  • さらに、シート1の特定のセルに入力した回数を、同じシートの別のセルに自動で表記する方法も教えてください。
回答を見る
  • ベストアンサー

文字を入力すると違うシートに順番に表記する方法

①シート1のセルC5に文字を手動で毎回入力すると、シート2のセルB5から下の列に順番に文字を自動で転送するVBAなどはどの様にすれば宜しいでしょうか? ②シート1のセルC6に文字を手動で毎回入力すると、シート2のセルC5から下の列に順番に文字を自動で転送するVBAはどの様にすれば宜しいでしょうか? ③同じ様な法則でシート1のセルC7に文字を手動で毎回入力すると、シート2のセルD5から下の列に順番に文字を自動で転送、シート1のセルC8に文字を手動で毎回入力すると、シート2のセルD5から下の列に順番に文字を自動で転送とする場合はどの様にすれば宜しいでしょうか? ④シート1のセルC5、C6、C7、C8に文字を手動で入力すると同じシート1の左隣のセルB5、B6、B7、B8に入力した回数を自動で表記する方法はありますか?

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

こんなコードと思います。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim StrRow As Long Dim TgtCol As Long Dim MaxRow As Long Dim ChgRow As Long Dim PutSh1 As Worksheet Dim PutSh2 As Worksheet Dim PutSh3 As Worksheet Dim PutCol As Long Dim PutRow As Long Dim ChgRng1 As Range Dim ChgRng2 As Range Dim ChgRng3 As Range StrRow = 5 MaxRow = 35 If Target.Count > 1 Then Exit Sub If Target.Value = "" Then Exit Sub Set PutSh1 = ThisWorkbook.Sheets("Sheet2") Set PutSh2 = ThisWorkbook.Sheets("Sheet3") Set PutSh3 = ThisWorkbook.Sheets("Sheet4") With ThisWorkbook.Sheets("Sheet1") Set ChgRng1 = Range(.Cells(StrRow, 3), .Cells(MaxRow, 3)) 'C列 Set ChgRng2 = Range(.Cells(StrRow, 5), .Cells(MaxRow, 5)) 'E列 Set ChgRng3 = Range(.Cells(StrRow, 7), .Cells(MaxRow, 7)) 'G列 End With ChgRow = Target.Row If Not Intersect(Target, ChgRng1) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh1, ChgRow, Target.Value End If If Not Intersect(Target, ChgRng2) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh2, ChgRow, Target.Value End If If Not Intersect(Target, ChgRng3) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh3, ChgRow, Target.Value End If End Sub Sub DataPut(toSh As Worksheet, ChgRow As Long, tgdata As Variant) Dim PutCol As Long Dim PutRow As Long PutCol = ChgRow - 3 PutRow = toSh.Cells(Rows.Count, PutCol).End(xlUp).Row + 1 If PutRow < 5 Then PutRow = 5 End If toSh.Cells(PutRow, PutCol).Value = tgdata End Sub

kxsst808
質問者

お礼

ありがとうございます! 無事に解決出来ました。 また宜しくお願いします。

その他の回答 (1)

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.1

後記コードをSheet1のモジュールに貼り付ければ 期待する動作になると思います。 なお、Sheet1のC列のどの行までが対象かのか未詳なので 20行目までのしています。 また、セルに埋める値が日付かどうかのチェックは行っていません。 例えば2022/1/1~2022/12/31の日付の場合に限って転記するのであれば その条件を加える必要があります。 詳しくはコードを眺めてください。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range)  Dim StrRow As Long  Dim TgtCol As Long  Dim MaxRow As Long  Dim ChgCol As Long  Dim ChgRow As Long  Dim PutSh As Worksheet  Dim PutCol As Long  Dim PutRow As Long    StrRow = 5  TgtCol = 3  MaxRow = 20  Set PutSh = ThisWorkbook.Sheets("Sheet2")  ChgCol = Target.Column  ChgRow = Target.Row    If Target.Count > 1 Then Exit Sub  If ChgCol <> TgtCol Then Exit Sub  If ChgRow < StrRow Then Exit Sub  If ChgRow > MaxRow Then Exit Sub  If Target.Value = "" Then Exit Sub    PutCol = ChgRow - 3  PutRow = PutSh.Cells(Rows.Count, PutCol).End(xlUp).Row + 1  If PutRow < StrRow Then   PutRow = StrRow  End If    PutSh.Cells(PutRow, PutCol).Value = Target.Value  Cells(ChgRow, ChgCol - 1).Value = Cells(ChgRow, ChgCol - 1).Value + 1 End Sub

kxsst808
質問者

お礼

ありがとうございます! 無事に解決出来ました。 また宜しくお願いします。

kxsst808
質問者

補足

ありがとうございます。 最後にもう一つ、転送先のシートを追加した場合の質問をさせて下さい。 ①こちらのVBAで、シート1のセルE5:E36の範囲に文字を手動で毎回入力すると、シート3のセルB5から下の列に文字を自動で転送するものを追加する場合はどの様にすれば宜しいでしょうか? ②同じ様な法則でシート1のセルG6:G36に文字を手動で毎回入力すると、シート4のセルB5から下の列に文字を自動で転送するものを追加する場合はどの様にすれば宜しいでしょうか? ③シート1のセルB5の様に、シート1のセルE5、E6、E7、E8・・・とG6、G7、G8、G9・・・に文字を手動で入力すると、同じシート1の左隣のセルD5、D6、D7、D8・・・とF6、F7、F8、F9・・・に入力した回数を自動で表記するものを追加する場合はどの様にすればよろしいでしょうか?

関連するQ&A

  • 【excel2003 vba】指定した文字列が入力されている「セル範囲」の表示方法?

    ◎Sheet1  A B C D E 1○○○-- 2○○○×× 3---×× 4×○--- ※「-」は空白 上記のようにセルに「○」「×」が入力されている「Sheet1」シートがあります。(例として○×の2種類を使っていますが、本当はもっとたくさんの種類の文字列があります。) vbaを使って、以下の一覧表を「List」シートに作成するコードを作成できませんでしょうか? ◎List  A     B 1○     ×  '文字列の種類 2A1:C2  D2:E3 '文字列の範囲  3B4     A4  '同上 【ToDo】 (1)1行目に文字列(○、×)を入力する (2)1行目に入力してある文字列が入力されているすべての「セル範囲」を2行目以降の各列に抽出する。 **1セル内に「○」「×」の両方が入力されているものもある。**  ⇒例えば、A1セルに「○×」と入力されていたら、「Rist」シートのA列B列の両方に「A1」が抽出されるようにしたい。 1セルごとのセル番地(○:A1,A2,B1,…)を一覧化することはできるのですが、同じ文字列をまとめた「範囲」の抽出ができないのです。 どなたかお力添えをお願いできませんでしょうか? 宜しくお願い致します。

  • セルの値を他のシートに反映させる方法を教えてください。

    シート内の複数セルに記入した文字列を、別シートの特定のセルに反映させる方法をご教授いただけませんでしょうか・・・。 具体的には、記入シート内のA1~A4に記入した文字列があります。それらをコマンドボタン押下で、 別シートのA列~D列にそれぞれ反映させたいのです。 (A1=A列、A2=B列、A3=C列、A4=D列という感じです。) また、各列に反映させた文字列は、毎回上書きされることなく列の一番下に反映するようにしたいと考えています。 VBA初心者で困り果てております。 どうぞ、よろしくお願いしますm(__)m

  • 文字入力セルにのみに番号を順に付ける

    ExcelでD3:D12に文字が入力されたあとボタン押しで同じ行B列のB1:B12に入力された文字のセル分だけ順番に番号を入力したいのですがVBAコードが解る方ご教授宜しくお願いします。 office2013です。

  • VBA 異なるファイルを指定して文字を抜き出す

    エクセルVBAについてご質問させて頂きます。 お詳しい方、ご教授頂ければ幸いです。 ファイルAを展開中に、別ファイルであるファイルB(ユーザ指定)の特定シートのセル「D2」及び「E2」から下のデータを順番に参照し、条件に合致する列のセル「B2」及び「C2」の文字列を繋げて改行し、 ファイルAの特定シートのセル「E2」から下に順番に貼り付けて行くには、 どのようにすれば良いでしょうか。 例   条件: D2=さ E2=た        ・ファイルB(指定) 特定シート        A    B    C    D    E    1    2   0    あ    か    さ    た    3   0    あ    き    さ    た    4   0    い    か    さ    ち    5   0    い    き    さ    た    6   0    う    か    し    た    7   0    え    か    し    ち    8   0    え    か    し    た    ・ファイルA特定シート       A    B    C    D    E    1                            2                      あ                           か    3                      あ                           き    4                      い                           き  実力不足で丸投げの形となってしまい申し訳ありませんが、 よろしくお願い致します。    

  • エクセルのマクロで入力文字を一文字ずつ並んだセルに入れる

    エクセルマクロ超初心者です。 エクセルVBAでユーザーフォームを作成しました。 テキストボックスに入力した文字列を「登録」ボタン押下後、エクセルシートのセルに一文字づつ入るようにするにはどうすれば良いでしょうか? 例えばテキストボックスに「kohiro」と入力するとエクセルのsheet1のA1「k」、B1「o」、C1「h」、D1「i」、E1「r」、F1「o」となるようにしたいのです。入力する文字数は0~30文字までで、その都度長さは変わります。どうやって、文字をばらせばいいのか、またどうやって可変長の文字列を指定したセルに入力すればいいのかわかりません。どうかよろしくお願いいたします。

  • あるセルに特定の文字列を打つと、他のセルに決められた文字が自動入力するように

    お世話になります。 表題の通り、 あるセルに特定の文字列を打つと、 他のセルにあらかじめ決められた文字が自動入力するようにしたいです。 具体的に言うと、 (1)セル(A,1)に「キリン」と打ち込むと    A   B   C   D 1 キリン 2 3 4 (2)1列目の B,C,Dに予め決めておいた文字が入力されるようにしたい    A   B   C   D 1 キリン 首  長い  アフリカ 2 3 4 のです。 エクセルで可能でしょうか? 詳しい方よろしくお願いいたします!

  • ExcelVBAでセルに入力されている種類と文字列を表示したいのですが

    ExcelVBAでセルに入力されている種類と文字列を表示したいのですが… Excelで、例えば下のように文字が入力されているとき、 A1:あああ B1:あああ C1:いいい D1:あああ E1:ううう F1:いいい このときにセルに入力されている種類(数)とその文字(この場合だと、3種類:『あああ』、『いいい』、『ううう』)をメッセージボックスで表示させたいのですが、VBAで作るのは可能でしょうか?

  • [ExcelVBA]検索文字で検索し文字入力する

    いつもお世話になっております。 以前に投稿をさせていただきましたgitmykと申します。 http://okwave.jp/qa/q7563274.html 前回はご回答くださり誠にありがとうございます。 この場で感謝申し上げます。 内容を精査させていただきましたので、再度投稿させていただきます。 問題(1) Sheet2のA列に[範囲指定文字]、B列に[検索文字]、C列に[入力文字]が複数入っている。 Sheet1を[範囲指定文字]で検索しCurrentRegionで範囲指定する。 範囲指定した全てのセルに対し、[検索文字]の上から順に検索していく。 該当セルがあれば、右4セルoffsetし、対応する[入力文字]を入力する。 ([検索文字]と[入力文字]は1対1で対応している) 問題(2) Sheet2のA列に[範囲指定文字]、B列に[検索文字1]、C列に[検索文字2]、D列に[入力文字]が複数入っている。 Sheet1を[範囲指定文字]で検索しCurrentRegionで範囲指定する。 範囲指定した全てのセルに対し、[検索文字1]の上から順に検索していく。 該当セルがあれば、右2セル上1セルoffsetしたセルを対応する[検索文字2]で検索し、双方が一致した場合のみ[検索文字1]で検索した該当セルから、右に4セルoffsetしたセルに、対応する[入力文字]を入力する。 ([検索文字1]と[検索文字2]、[入力文字]は対応している) 問題(3) Sheet1を[範囲指定文字]で検索し下に1セルoffsetした位置をCurrentRegionで範囲指定した場合。 上記内容をExcelVBAでどのように記載すればよいか、ご教授くださいませんでしょうか。 VBA学習中です。 何卒宜しくお願いいたします。

  • Excelのブック内のシート名を順番に表示させる

    類似の質問を探していろいろ試してみたのですがどうしてもうまくいかなくて・・・教えてください。 ブック内にシートが複数枚あるとします。 最初の1枚目のシートは一覧表となっておりそのシートのセルA1から順にA2、A3…と下に表が続いています。 セルA1には2枚目のシート名が自動的に入力される セルA2には3枚目のシート名が自動的に入力される というようにブック内にあるシート名を順番に セルに表示入力できる方法はありますか? ちなみにVBAはほとんど触ったことはありません。 よろしくお願いします。

  • エクセルを使った文字入力練習シート

    例えば、エクセルシートのA1のセルに見本となる「ひらがな」文字を表示しておき、B1セルにローマ 字入力で該当文字を入力し、スペルが正しければ○、誤りは×をC1セルに表示し、×の場合には 正しいスペルをD1に表示する文字入力練習シートを作成したいのですが、簡単な方法があれば 教えて下さい。エクセルは2007、2008です。

専門家に質問してみよう