いつもお世話になります、MEGUMIと申します。
既存のマクロに更に条件を追加したいという質問をさせてください。

現在、フォルダの中にある全てのエクセルファイルを下記のような処理をしています。
●エクセルファイルの中の全てのSheetの1行目以降のA,B,C,G,H列をコピーしてマクロを動作させるエクセルファイルのSheet1に順次(A,B,C,D,E列)ペースト
 ※マクロは下記の内容( Sub 今日のわたし()以降です )です。

これに下記のような条件を追加したいのですがどのようにすればいいでしょうか?

○I列に”元気”という文字が存在していた場合に限って、その列のA,B,C,G,H,I列をコピーしてマクロを動作させるエクセルファイルのSheet1に順次(A,B,C,D,E,F列)ペースト

お忙しいところ大変恐れ入りますがもしご存知の方がいらっしゃりましたらご指導のほど何卒宜しくお願いいたします。

Sub 今日のわたし()
Dim XlFile As String
Dim MotoDataLastRow As Long
Dim CopySakiLastRow As Long

ThisWorkbook.Activate
Worksheets(1).Select
Cells.Clear

XlFile = Dir(ThisWorkbook.Path & "\*.xls?")
Do While XlFile <> ""
If XlFile <> ThisWorkbook.Name Then
Workbooks.Open ThisWorkbook.Path & "\" & XlFile, ReadOnly:=True
Worksheets(1).Select
MotoDataLastRow = Workbooks(XlFile).Worksheets(1).[A65536:H65536].End(xlUp).Row '元データファイルの最終行を取得
CopySakiLastRow = ThisWorkbook.Worksheets(1).[A65536:E65536].End(xlUp).Row 'インポート先の最終行を取得
If MotoDataLastRow > 1 Then
Range([A2], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
Range([G2], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
End If
Workbooks(XlFile).Close False
End If
XlFile = Dir()
Loop
End Sub

このQ&Aに関連する最新のQ&A

A 回答 (4件)

ANo2-3 merlionXXです。


どうもよくわかりません。

> ”元気”という文字のある列のA,B,C,G,H,IをコピーしてA,B,C,D,E,F列にコピーで問題ないです。

”元気”という文字のある列はI列ですよね?
そのI列になぜA,B,C,G,H列があるんですか?I列にはI列しかないでしょう?
”元気”という文字のある行のA,B,C,G,H,I列をコピーするんじゃないのですか?

> 現在の問題は
> ”元気”という文字がI列に入っていなくて別の文字が入っていてもコピーしてきてしまいます。

これはANo.2で回答したコードでの結果ではないのですか?
ANo3のコード、Sub 今日のわたし03() では、”元気”という文字のある行だけ、A,B,C,G,H,I列をコピーするようにしたはずなのですが。
ひょっとしてエクセルのバージョンが違うとオートフィルタのコピーがうまくいかないのかもしれません。
可視セル("元気"フィルターで抽出されたセル)だけコピーするように変えてみました。

これでどうでしょう?

Sub 今日のわたし04()
  Dim XlFile As String
  Dim MotoDataLastRow As Long
  Dim CopySakiLastRow As Long
  Dim myC As Range
  ThisWorkbook.Activate
  Worksheets(1).Select
  Cells.Clear
  Application.ScreenUpdating = False
  XlFile = Dir(ThisWorkbook.Path & "\*.xls?")
  Do While XlFile <> ""
    If XlFile <> ThisWorkbook.Name Then
      Workbooks.Open ThisWorkbook.Path & "\" & XlFile, ReadOnly:=True
      With Worksheets(1)
        Set myC = .Columns("I:I").Find(What:="元気", LookAt:=xlPart)
        If Not myC Is Nothing Then
          .AutoFilterMode = False
          .Range("I:I").AutoFilter field:=1, Criteria1:="=*元気*"
          MotoDataLastRow = Workbooks(XlFile).Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row '元データファイルのA列最終行を取得
          CopySakiLastRow = ThisWorkbook.Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row 'インポート先のA列最終行を取得
          .Range("A2", Cells(MotoDataLastRow, "C")).SpecialCells(xlCellTypeVisible).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
          .Range("G2", Cells(MotoDataLastRow, "I")).SpecialCells(xlCellTypeVisible).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
        End If
      End With
      Workbooks(XlFile).Close False
    End If
    XlFile = Dir()
  Loop
  Application.ScreenUpdating = True
End Sub
    • good
    • 0

ANo2 merlionXXです。



違っているということは

> その列のA,B,C,G,H,I列をコピーして

ではなく、その行のA,B,C,G,H,I列をコピーするんですね?
ならば、これでいかがでしょう?

Sub 今日のわたし03()
  Dim XlFile As String
  Dim MotoDataLastRow As Long
  Dim CopySakiLastRow As Long
  Dim myC As Range
  ThisWorkbook.Activate
  Worksheets(1).Select
  Cells.Clear
  Application.ScreenUpdating = False
  XlFile = Dir(ThisWorkbook.Path & "\*.xls?")
  Do While XlFile <> ""
    If XlFile <> ThisWorkbook.Name Then
      Workbooks.Open ThisWorkbook.Path & "\" & XlFile, ReadOnly:=True
      With Worksheets(1)
        Set myC = .Columns("I:I").Find(What:="元気", LookAt:=xlPart)
        If Not myC Is Nothing Then
          .AutoFilterMode = False
          .Range("I:I").AutoFilter field:=1, Criteria1:="=*元気*"
          MotoDataLastRow = Workbooks(XlFile).Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row '元データファイルのA列最終行を取得
          CopySakiLastRow = ThisWorkbook.Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row 'インポート先のA列最終行を取得
          If MotoDataLastRow > 1 Then
            .Range("A2", Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
            .Range("G2", Cells(MotoDataLastRow, "I")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
          End If
        End If
      End With
      Workbooks(XlFile).Close False
    End If
    XlFile = Dir()
  Loop
  Application.ScreenUpdating = True
End Sub

この回答への補足

申し訳ありません、私の説明不足でした。
”元気”という文字のある列のA,B,C,G,H,IをコピーしてA,B,C,D,E,F列にコピーで問題ないです。
現在の問題は
”元気”という文字がI列に入っていなくて別の文字が入っていてもコピーしてきてしまいます。
ちなみにI列に何も記載されていないとコピーはしてきません。
したいことは、
”元気”という文字がI列にあった場合にだけ、その列(”元気”がある列)のA,B,C,G,H,IをコピーしてA,B,C,D,E,F列にコピーしてきて欲しいのです。
取り急ぎではありますが以上何卒宜しくお願いいたします。

補足日時:2011/04/19 16:20
    • good
    • 0

>.[A65536:H65536].End(xlUp).Row



このような書き方をはじめて見ましたが、どの列の最終行をもとめたいのでしょうか?
とりあえずA列で見ることにしました。

> ○I列に”元気”という文字が存在していた場合に限って、その列のA,B,C,G,H,I列をコピーしてマクロを動作させるエクセルファイルのSheet1に順次(A,B,C,D,E,F列)ペースト

元気という文字が存在しなければ何もしなくていいんですね?
では、一例です。

Sub 今日のわたし02()
  Dim XlFile As String
  Dim MotoDataLastRow As Long
  Dim CopySakiLastRow As Long
  Dim myC As Range
  ThisWorkbook.Activate
  Worksheets(1).Select
  Cells.Clear
  Application.ScreenUpdating = False
  XlFile = Dir(ThisWorkbook.Path & "\*.xls?")
  Do While XlFile <> ""
    If XlFile <> ThisWorkbook.Name Then
      Workbooks.Open ThisWorkbook.Path & "\" & XlFile, ReadOnly:=True
      With Worksheets(1)
        Set myC = .Columns("I:I").Find(What:="元気", LookAt:=xlPart)
        If Not myC Is Nothing Then
          MotoDataLastRow = Workbooks(XlFile).Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row '元データファイルのA列最終行を取得
          CopySakiLastRow = ThisWorkbook.Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row 'インポート先のA列最終行を取得
          If MotoDataLastRow > 1 Then
            .Range("A2", Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
            .Range("G2", Cells(MotoDataLastRow, "I")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
          End If
        End If
      End With
      Workbooks(XlFile).Close False
    End If
    XlFile = Dir()
  Loop
  Application.ScreenUpdating = True
End Sub

この回答への補足

早速の返信ありがとうございました。
なぜか”元気”以外の文字が有るところも拾ってきてペーストされてしまうようです。
私の質問にもっとも近い出来なので何とか”元気”以外の文字を拾ってペーストしないようにしたいのですが・・・

補足日時:2011/04/19 15:02
    • good
    • 0

例えば。



変更前:
Worksheets(1).Select
MotoDataLastRow = Workbooks(XlFile).Worksheets(1).[A65536:H65536].End(xlUp).Row '元データファイルの最終行を取得
CopySakiLastRow = ThisWorkbook.Worksheets(1).[A65536:E65536].End(xlUp).Row 'インポート先の最終行を取得

変更後:
Worksheets(1).Select
activesheet.autofiltermode = false
range("I:I").autofilter field:=1, criteria1:="=*元気*"
MotoDataLastRow = Workbooks(XlFile).Worksheets(1).range("A65536").End(xlUp).Row '元データファイルの最終行を取得
CopySakiLastRow = ThisWorkbook.Worksheets(1).range("A65536").End(xlUp).Row 'インポート先の最終行を取得

のように。


#参考
今回ご質問内容には直接関係無い部分ですが,range("A65536:H65536").end(xlup)では「左端A列の」最下端しか調べることが出来ません。結果して上述「変更後」と同じ動作しかしていないという事です。
もしも最下端が「A列とは限らない」場合は,別の調べ方をする必要があります。
たとえばシート.cells.specialcells(xlcelltypelastcell)を調査するとか,BCDEFGH列を1列ずつ最下端を調べて一番大きい数字を採用するとか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル(マクロ記録)

よろしくお願いします。
エクセルで、印刷マクロを作ろうと考えています。
             (基本、入門者です)
マクロ記録で、作っていますが、
記録終了するたびに「 印刷 」がかかっては、
用紙が何枚あっても足りません。

いい考えがありましたら、お教えください。
お願いします。

Aベストアンサー

#3の回答者です。

>出来たら、この i=1 の意味を教えていただけませんでしょうか?
単に、それはページ数です。

ヘルプを引用します。(PrintOut で調べました)

式.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

From オプション 印刷を開始するページの番号を指定します。この引数を省略すると、最初のページから印刷します。
To オプション 印刷を終了するページの番号を指定します。この引数を省略すると、最後のページまで印刷します。

と出てきます。

QAccess クエリ 複数条件で実施件数をカウント、表示する いつも大変お世話になっておりま

Access クエリ 複数条件で実施件数をカウント、表示する

 

いつも大変お世話になっております。

Accessで実施記録および、集計・日報管理を行うことになったのですが、

カウントのところで分からなくなりました。

 

現在 2つのテーブルがあります。

T_面談記録  実施日|担当者名|対象者名・・・記録もろもろ

 T_日報    実施日|担当者名|その他活動記録

 

これらを用い、

 T_日報をメインにクエリを用い、その日の担当者ごとの件数を面談・相談それぞれカウントし

 任意の列に[面談件数]として表示したいのです。

 

その際、DCOUNTを使うのだろうことは分かったのですが、

異なるテーブルにある、実施日、担当者名という2つの条件をどのように表記するべきか

分からなく、困っております。

 

なにぶん普段は看護職でして、Accessは初心者なのですが、

より良い統計をとの上からの指示で作り始めました。

よろしくご指導ください。

Aベストアンサー

クエリで集計してやればいいと思います。
T_面談記録をクエリの集計で

|実施日  |担当者名 |担当者名のカウント|
|グループ化|グループ化|カウント     |

これで実施日、担当者ごとのレコード数のデータができます。

http://www.feedsoft.net/access/guide-query/guideq26.html


>面談・相談それぞれカウントし
この部分はどのように区別するのかわかりません。

Qエクセル マクロコードの記述の勉強

独学でエクセルでのマクロのコード記述ができるようになりたいのですが、コードがかける人はどのようにしてかけるようになったのでしょうか?

プログラミング関係にはまったくの初心者なので、入門本を立ち読み程度読んでみたのですが、「面白そうだが、かなり手強そう」というような印象でした。

現実的な問題として、実際にコードをかける人は、プログラミング関係の学校等で学んだ人ぐらいしかいないのでしょうか?

めざすレベルはエクセルでこうしたいと考えたものを調べながらコードをかける程度のレベルです。

Aベストアンサー

> 実際にコードをかける人は、プログラミング関係の
> 学校等で学んだ人ぐらいしかいないのでしょうか?

そんな事ないです。私も独学で覚えましたから。

エクセルはマクロ記録がありますので、実際の操作を記録して書かれたコードを追っていったり、書き直したり出来ます。
VisualBasicEditor画面でコードにカーソルを置き、F1キーを押すとVBAヘルプ(たしか標準ではインストールされないので追加インストールの必要がある)が開くので、意味を調べたり、サンプルコードを見たりして覚えて行きました。
ネットにも沢山サンプルがありますし。

変数の使い方とforやif等を覚えてマクロ記録を直すだけでも結構便利になります。

Qエクセルを新規で開いても既存のExcelを開いてもいつも変なマクロがくっ付いています。どうすれば取ることができるでしょうか?

今日気づいたのですが、エクセルを新規で開いても既存のExcelを開いてもいつも変なマクロがくっ付いています。どうすれば取ることができるでしょうか?
VBEを開くとfuncres(FUNCRES.XLA)という身に覚えのないマクロがありました。開放しようとしてもボタンが押せない状態で削除できません。パスワードもかかっており中身を見ることもできません。
ウイルスなんでしょうか?対処方法についてご存知の方、教えてください。よろしくお願いします。

Aベストアンサー

分析ツールです。

FUNCRES.XLAとは
http://www.relief.jp/itnote/archives/001707.php

Qエクセルについているマクロが出てこない・・・

 エクセルをひらき、ツール→マクロ→マクロでマクロの作成ができると聞きましたが、私のエクセル2002ではマクロのその機能が空欄状態です。復帰や回復できる方法を教えて下さい。

Aベストアンサー

(1)自分でマクロの記録を採る。
    ツールーマクロー新しいマクロの記録
(2)または他人がマクロの記録をとった。
   (3)他人がVBAコード(プログラム)を組んだ
    ツールーマクローVBEープログラム作成
場合に出てくる。(1)(2)(3)ともやっていないから、出てこないのは当然。
(1)なぞはマクロの画面でマクロー編集でコードが見れます。
ーーー
本でもWEBでも、マクロに関する本1冊か、「エクセル マクロ」でWEB照会して、勉強し。予備知識をえるべきです。

Qこんにちは いつもお世話になっています

こんにちは いつもお世話になっています

エクセル2003で質問します。
複数シートを一括でスクロールする方法を教えてください。
縦長の複数シートを扱っているので、例えば複数シートでA列100行目が表示されるようにしておきたいケースがあります。ウィンドウを複数開く必要はありません。単に指定した複数シートを開くたびにA列100行目辺り(あくまでも例です)が表示されるようにしたいのです。「ウィンドウ」メニューの「並べて比較」では二つのシートのスクロールを連動させるだけのようですし、ウィンドウは一つだけでいいのです。
よろしくお願いします。

Aベストアンサー

シートを移動した時、常に100行目を表示したいなら、ThisWorkbook に以下のコードを入れてみてください。100行目が一番上に表示されます。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  ActiveWindow.ScrollRow = 100
End Sub

別なシートで選択した行を、移動したシートでも表示したいなら、ThisWorkbook に以下のコードを入れてみてください。
手抜き版なので、セルを選択せずにスクロールだけした場合は他のシートには反映されません。

Dim nSellectRow As Long
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  If nSellectRow = 0 Then nSellectRow = 1
  ActiveWindow.ScrollRow = nSellectRow
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  nSellectRow = ActiveWindow.ScrollRow
End Sub

シートを移動した時、常に100行目を表示したいなら、ThisWorkbook に以下のコードを入れてみてください。100行目が一番上に表示されます。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  ActiveWindow.ScrollRow = 100
End Sub

別なシートで選択した行を、移動したシートでも表示したいなら、ThisWorkbook に以下のコードを入れてみてください。
手抜き版なので、セルを選択せずにスクロールだけした場合は他のシートには反映されません。

Dim nSellectRow As Long
Private Sub Workbook_SheetA...続きを読む

Qエクセル2010で作成したマクロ

エクセル2010で作成したマクロブックがあります。
このエクセルを知人にメールで送りました。

知人のエクセルは2007です。
マクロブックのフォームボタンを押しても何も動作しない状況との事です。

エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

素人の質問で申し訳ありませんが、ご指導お願いいたします。

Aベストアンサー

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイルの形式をマクロ有効ブックにして保存したのを送ったか再確認する
といったところをよく確認してください


先方に対してあなたが確認すべきポイントとしては、
○「何も起こらない」とは、具体的にどんな状況なのか再確認する
 ・ホントにうんともすんとも反応が無いということなのか
 ・実は何かエラーメッセージっぽいダイアログが現れて、OKをクリックしてもマクロが動作した様子が無いとかの状況では無かったか



具体的な状況が明らかになったら、ようやく対処を検討する事ができるようになります。
●そもそもどういうマクロを作成したのか、ご自分の作成したマクロをよく確認して、「反応が現れない」マクロを書いてたんじゃないのか再確認する
 たとえば無意味にon error resume nextのような仕込みをしてたりしないか
 たとえば不適切なデータに対して何も作動せずに終わってしまうようなそもそも作りにしてたんじゃないか
 とか。

●実は何かダイアログが出てたのなら、具体的にどんなダイアログなのか正確に聞き取って、あなたの方で対処を考える
 「マクロが無効になってる」のなら、マクロを有効にして実行するように伝える
 とか。

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイル...続きを読む

Q条件A→MSGBOX 条件B→マクロ実行 

 
 顧客データーを並べ替えるマクロを組んでいます。
 顧客データは、10行目以降です。
 この10行目以降のセルがアクティブになっていなければ、「並べ替えマクロ」が実行されないようにしようと思っています。

 代わりに次のようなメッセージ
 「MsgBox "顧客情報、データ内のどこかをクリックして下さい", vbCritical」
 …と表示させようと思っています。

 以前、質問をしたところ、次のようなアドバイス(シートモジュール)を頂きました。
 
*************************************
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row < 10 Then
MsgBox "顧客情報、データ内のどこかをクリックして下さい", vbCritical
End If
End Sub
*************************************

…これは、見事に機能したのですが、
これですと、マクロの実行不実行に関わらず、
「9行目より上のセルがクリックされたら」…無条件でメッセージボックスが表示されてしまいます。

そこで、
次のような分岐を作成したいのです。

【9行目以上のセルがアクティブな場合】
 →メッセージボックスが表示され、アクティブセルを10行目以降のどこかにするように促され、マクロ終わり。

【10行目以下のセルがアクティブ】
 →並べ替えマクロの実行

 並べ替えマクロはできていますが、
 この上の分岐の部分がまだできません。

 これについてのアドバイスをお願いできればと思います。

 どうぞ、よろしくお願いいたします。 

 
 顧客データーを並べ替えるマクロを組んでいます。
 顧客データは、10行目以降です。
 この10行目以降のセルがアクティブになっていなければ、「並べ替えマクロ」が実行されないようにしようと思っています。

 代わりに次のようなメッセージ
 「MsgBox "顧客情報、データ内のどこかをクリックして下さい", vbCritical」
 …と表示させようと思っています。

 以前、質問をしたところ、次のようなアドバイス(シートモジュール)を頂きました。
 
************************...続きを読む

Aベストアンサー

何をやってるのか理解してください。応用以前の問題です。


sub すでに出来上がったマクロ()

 if activecell.row < 10 then
  msgbox "エリア内を選択すること"
  exit sub
 end if

’ if その他の並べ替え実行条件が成立していなければ
’  msgbox "実行条件が成立していない"
’  exit sub
’ end if


 msgbox "並べ替え GO"

end sub

Qエクセルで作成したマクロが他のシートに反映しない

必要に迫られ始めてマクロをエクセル上で作成してみました。(初心者)
そのマクロを違うエクセルファイル上でも反映させたいのですが
マクロを作ったおおもと(最初)のファイルを閉じてしまうと違うエクセルファイルを開いてもマクロが反映されていません。
マクロでの命令内容としては 
エクセル上の数字の羅列→グラフ作成→上書き保存 という手順で作りました。
他のエクセルファイルも同じように数字の羅列があります。それを同じ作業(グラフ作成→上書き保存)したいのです。
一度作ったマクロを他のエクセルファイルにも反映させるにはどうしたら良いのでしょうか?
説明がわかりにくくてすみません。
よろしくお願いします。

Aベストアンサー

マクロの記録先を「個人用マクロブック」にするのが良いと思います。
一回マクロの記録を行い「保存先」を「個人用マクロブック」にします。するとPERSONAL.XLSという特別なブックが作成されます。

このブックの標準モジュールシートに先に作ったマクロを貼り付けてください。

そうすればエクセルを開くと、どのブックでもマクロが実行可能になります

Q既存の表にデータを追加したい!

既存の表にデータを追加したいのですがどのようにすればよろしいですか?
氏名を検索し商品を追加したい.新規の場合は名前も追加して書き加えたい。
氏名と商品を入力し次々に書き加えたいと思います。お願いします。

検索者名前を入力   商  品
 アオキ カヨコ    ベット

  既存の表
    番号     氏   名     商  品
     1      アオ トオル    テレビ
     2      アオ ミツヨ    パソコン
     3      アオキ カヨコ   かばん     ベット←この位置に追加表示出来ない?
     4      アオキ フミ     机
     5      アガタ エツミ    いす
     6      アガタ マサユキ  鉛筆
      新規の方は表に追加する

Aベストアンサー

たとえば使い慣れた(?)エクセルを使うとして,しかしふつーにやっていたのではそういう事は出来ません。
あくまでお試し,体験版として次のように作業してみてください。



添付図:まっさらのエクセルを開き,この通りに作成します。
B2とC2セルが入力欄です
6行目からがデータが追加されていく表です。
各列も,添付図の通りに作成している事が前提です。

手順:
シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim h As Range
 If Application.Intersect(Target, Range("B2:C2")) Is Nothing Then Exit Sub
 If Application.CountA(Range("B2:C2")) <> 2 Then Exit Sub
 Set h = Range("B6:B65536").Find(what:=Range("B2"), LookIn:=xlValues, lookat:=xlWhole)
 If h Is Nothing Then
 'new data
 Set h = Range("B65536").End(xlUp).Offset(1)
 h.Offset(0, -1) = Application.Sum(h.Offset(-1, -1), 1)
 End If
 h = Range("B2")
 Cells(h.Row, "IV").End(xlToLeft).Offset(0, 1) = Range("C2")
 Range("B2:C2").ClearContents
End Sub

ファイルメニューから終了してエクセルに戻る
そのままB2セルとC2セルにデータを記入する。
次々B2とC2に記入していく。
繰り返しますが,勝手に表の配置を変えるとこのプログラムは動かなくなりますから,添付図の通りにお試しで作成してください。

たとえば使い慣れた(?)エクセルを使うとして,しかしふつーにやっていたのではそういう事は出来ません。
あくまでお試し,体験版として次のように作業してみてください。



添付図:まっさらのエクセルを開き,この通りに作成します。
B2とC2セルが入力欄です
6行目からがデータが追加されていく表です。
各列も,添付図の通りに作成している事が前提です。

手順:
シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

Private Sub Worksheet_Change(ByVal Target As Ra...続きを読む


人気Q&Aランキング

おすすめ情報