• ベストアンサー

Excel VBA

お世話になります。 概要 Excelで入力した値をExcelへ転送させたいのですが 管理簿.xls 社員名|社員番号|記事|販売数値| 太郎 |00120142|  |140 | 花子 |12333457|  |    | 山田 |0123443 | | | エクセル側では販売数値はランダムに入力されています 入力フォーム.xls 社員番号|販売数値| 12333457|200 | 0123443 |10E  | 入力フォーム側では社員番号及び販売数を入力します 入力フォーム内で社員番号を入力するときにエクセル側と社員番号が一致しない 又は、重複していればエラーでそのつど返したい。 入力が終わると実行ボタンで 管理簿に販売数値を入力させたい 管理簿.xls(結果) 社員名|社員番号|記事|販売数値| 太郎 |00120142|  |140 | 花子 |12333457|  |200   | 山田 |0123443 | |10E | 管理簿側はブックの共有をしており数名が開いている場合があります 複雑ですがわか方お願い致します。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.6

No2,3です。 >販売件数にもともと文字等がある場合のエラーも出したいです。 ですが、ボタンを押して判断するより C2セルに=IF(ISERROR(MATCH(A2,Sheet1!B:B,0)),"",MATCH(A2,Sheet1!B:B,0)) D2セルに=IF(C2="","",IF(INDEX(Sheet1!B:B,C2,1)="","",INDEX(Sheet1!B:B,C2,1))) で下フィルしておくと、D列に管理簿の販売数値が見て取れます。 これも十分かと思いますが、A列の入力規則のユーザー設定で =D2="" で設定すると、D列が空白以外は入力できなくなります。

その他の回答 (5)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

NO2,3です。以下、方法だけご紹介します。 上記のコマンドボタンを製作実行結果は1行に対して1コマンドボタン となっている為1コマンドボタンですべての行を反映させてあげたいです。 入力シートの2行目から順に上に移動して、セルが空白になるまで 繰り返す方法ですが。 i = 2 Do Until Cells(i, 2).Value = "" Sheets("Sheet1").Cells(Cells(i,3).Value, 3).Value = Cells(i,2).Value i = i + 1 Loop iという変数が2から順に1つづつ増えていきます。セルのi行の2列目が空白になったら終了です。 中の1行ですが、RangeコマンドからCellsに変えました。 どちらも同じ意味ですが、CellS(行番号,列番号)で使用します。 セルの場所を指定する為に使用するコマンドです。 販売件数にもともと文字等がある場合のエラーも出したいです。 If Sheets("Sheet1").Cells(Cells(i,3).Value, 3).Value="" Then Sheets("Sheet1").Cells(Cells(i,3).Value, 3).Value = Cells(i,2).Value Else Msgbox ("既に値が入っています。") Cells(i, 3).Interior.ColorIndex = 8 End If と、条件で値を入れるか、メッセージを出すかの判断を組み込めばよいと思います。一応、既に値が入っていた場合には、セルの色変えるようにしてあります。 もし、エラーやご希望と違えば、作成されたVBAを貼り付けてもらうと、 間違いなど探せると思います。

  • TTak
  • ベストアンサー率52% (206/389)
回答No.4

こんにちは。 すみません。私の環境?XP+EXCEL2000ですが、管理簿.xls[共有]に対し、入力フォーム.xlsのVBAから書き込み>保存をかけると、ブックの共有が解除されるようです([共有]の表示は残りますが)。 よって、#1の方法を提示した次第です。もしBSR123さんの環境で可能であれば、共有機能でもよいかと思われます。 社員番号にない入力を規制するマクロ例は下記のとおりです。 このマクロ例は、入力フォーム.xlsのモジュールに記述した場合です。 入力フォーム.xlsのSheet1のセルA1に入力された社員番号に対し、管理簿.xlsのSheet1のセルB2:B100に入力された社員番号に一致するものがなければ、処理を中断するものです。 Sub Macro1() Windows("管理簿.xls").Activate With ThisWorkbook.Sheets(1)  .Range("A2").Formula = _  "=COUNTIF([管理簿.xls]Sheet1!$B$2:$B$100,A1)"  If .Range("A2").Value = 0 Then   MsgBox "入力された社員番号はありません"  Else   '-ここに転記マクロ記入   ActiveWorkbook.SaveAs  End If  .Range("A2").Value = "" End With End Sub

BSR123
質問者

お礼

お返事ありがとうございます

BSR123
質問者

補足

お返事ありがとうございます この方法だと、どの位置(セル)でまちがっているのか? 入力間違い? 入力したけど販売件数にもともと値が入っているか? などわからないと思われます しかしながらこれは有力な情報ありがとうございます

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

取り合えず、同じブックの別シートで、入力シートから反映させる方法ですが、非常に簡単ですので、ご紹介だけしておきます。 新しいブックで試してみてください。 Sheet1に 社員名|社員番号|記事|販売数値| 太郎 |00120142|  |140 | 花子 |12333457|  |    | 山田 |0123443 | | | があったとして 別シートに 社員番号|販売数値|作業列 12333457|200 | で、C2セルには、=MATCH(A2,Sheet1!B:B,0) と入れておくと、A1で入れた社員番号がSheet1の何行目にあるか行数を返します。 その隣にでもマクロボタンを作成して Sub ボタン1_Click() Sheets("Sheet1").Cells(Range("C2"), 3).Value = Range("B2").Value End Sub と作成してみてください。内容はわずか1行でし、難しくもないと思いますので、応用してみてください。 A1セルには、Sheet1の社員番号の列で入力規則を設定しておくと誤入力防止になります。 別ブックからでも応用は出来ると思いますが、現在、共有で出来ているのであれば、これで十分のような気がします。 ただ、ブックの共有はファイルが非常に大きくなりますので将来については、十分ご検討ください。 例えば、現在のファイルを別にコピィして、ブックの共有をはずして保存したファイルと、ファイルの大きさを比較してみると良くわかると思います。 前スレで紹介したように、別シートにデータを縦方向に追加して行き、 結果を集計のシートにSUMIFなどで表示したほうが良いような気がします。

BSR123
質問者

お礼

お返事まことにありがとうございました

BSR123
質問者

補足

お返事ありがとうございます これです、こんなのがほしかったです。 本当に有力な情報ありがとうございます。 ただもう2つ問題があります HITすれば管理簿の番号が入力される HITしない場合は下記エラー #N/A ここまではOKです HITしているのだけど販売件数にもともと文字等がある場合のエラーも出したいです。 又、VBAのボタンですが Sheets("Sheet1").Cells(Range("C2"), 4).Value = Range("B2").Value 上記のコマンドボタンを製作実行結果は1行に対して1コマンドボタン となっている為1コマンドボタンですべての行を反映させてあげたいです。 まことに申し訳ございませんがもう少しのご教授宜しくお願い申し上げます。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>管理簿側はブックの共有をしており数名が開いている場合があります すでに、管理簿ブックで運用されていると思いますが、管理簿ブックは、 複数が編集したりされているのですか? 基本的には、日々、社員番号で販売数が入力されて、販売数値が加算されていくとは違いますか? ご存知かと思いますが、エクセルでは、データを保存することで、ほかの人へ編集した結果を伝えます。同時に、同じセルを編集した場合の問題が常についてきます。 この様な環境でればアクセスに乗り換えたほうが便利かと思います。 役に立つかどうかはわかりませんが、過去スレ紹介いたします。 参考にしてください。

参考URL:
http://oshiete1.goo.ne.jp/qa3775393.html
BSR123
質問者

お礼

お返事ありがとうございます

BSR123
質問者

補足

お返事ありがとうございます はい現状はブックの共有して、多数のPCが書き換えても、問題はありません 現在同じセル位置での編集はないはずなので VBA内でのVLOOKかなと思い始めました ブックの共有で閉じるときに他のユーザの更新も反映させてあげれば問題ないと思っております 関数でのVLOOKUPは管理簿自体に書き込まなければならないので 入力フォーム用からの書き込み、が理想なんですが・・・

  • TTak
  • ベストアンサー率52% (206/389)
回答No.1

入力フォーム.xlsに入力されたデータ「販売数値」を、「社員番号」をキーとして、管理簿.xls に転記。また、入力フォーム.xlsの社員番号入力タイミングで、社員フィールドに無い番号はエラーを出す機能も付けたいということと察します。 これらはExcelVBAでもできないことはないですが、管理簿.xlsを複数の人が閲覧している状況で、入力フォーム.xls側から書き込みを掛けることはできません。 よって、構成としては閲覧用の管理簿ファイルの他に、管理簿データ本体のファイルが必要かと思われます。入力フォーム.xlsからの書き込みは、データ本体ファイルに行い、閲覧する人は、閲覧用の管理簿.xlsを開くと同時に最新のデータファイルの内容を「外部データの取込」で開くのが良いのではないでしょうか。「外部データの取込」ではクエリも使えるので、閲覧データの絞り込みなども有る程度できます。 社員フィールドに無い番号を入力させないようにするには、COUNTIF関数などを使って、データファイルの社員番号フィールドを範囲指定し、返値が0ならば、他のセルにメッセージを出すか、Changeイベントなどを使って、その返値により条件分岐させる方法が考えられます。

BSR123
質問者

お礼

お返事ありがとうございます 今しばらくの間ご教授願います

BSR123
質問者

補足

お返事ありがとうございます >入力フォーム.xlsに入力されたデータ「販売数値」を、「社員番号」をキーとして、管理簿.xls に転記。また、入力フォーム.xlsの社員番号入力タイミングで、社員フィールドに無い番号はエラーを出す機能も付けたいということと察します。 はいご理解ありがとうございます >これらはExcelVBAでもできないことはないですが、管理簿.xlsを複数の人が閲覧している状況で、入力フォーム.xls側から書き込みを掛けることはできません。 そうですか? 私はできそうな気がするのですが、複数の人が管理簿.xlsを開いているのにはブックの共有を有効にしているので複数の人が同じセルに書き込まない限り可能ではないでしょうか? >社員フィールドに無い番号を入力させないようにするには、COUNTIF関数などを使って、データファイルの社員番号フィールドを範囲指定し、返値が0ならば、他のセルにメッセージを出すか、Changeイベントなどを使って、その返値により条件分岐させる方法が考えられます。 VBAに関して初心者です よろしければコードがあれば助かります。

関連するQ&A

  • Access→エクセルへ転送 VLOOKUP?

    お世話になります。 概要 Accessで入力した値をエクセルへ転送させたいのですが A.xls 社員名|社員番号|記事|販売数値| 太郎 |00120142|  |140 | 花子 |12333457|  |    | 山田 |0123443 | | | エクセル側では販売数値はランダムに入力されています B.mdb 社員番号|販売数値| 12333457|200 | 0123443 |10   | Access側では社員番号及び販売数を入力します 入力フォーム内で社員番号を入力するときにエクセル側と社員番号が一致しない 又は、重複していればエラーで返し再入力ヒットすれば販売数に値を入れます。 *重複とはエクセル内に同じ社員番号が存在する場合 追記 Access側で社員番号を入力したときエクセル側の販売数値に値があればエラーでかえしたい 入力が終わると実行ボタンで 開かずにエクセルに販売数値を入力させたい A.xls(結果) 社員名|社員番号|記事|販売数値| 太郎 |00120142|  |140 | 花子 |12333457|  |200   | 山田 |0123443 | |100 | エクセル側はブックの共有をしており数名が開いている場合があります 複雑ですがわか方お願い致します。

  • エクセルについて

    エクセルで住所録を作っているのですが、名前とフリガナを同じセルに入力していました。フリガナだけを横のセルに移動することは可能でしょうか      A             B 1山田 太郎 ヤマダ タロウ  2山田 花子 ヤマダ ハナコ    A | B 1山田 太郎 | ヤマダ 太郎 2山田 花子 | ヤマダ ハナコ 宜しくお願いします。

  • Excel(マクロ?VBA?)で最大日付の行を抽出

    Excelのデータ抽出で困っております。 下記のようなデータがあり、各IDの最大日付の行を抽出しようとしていますが、抽出方法がわからず、困っています。  氏名  ID   日付   山田太郎 10 2012/12/01 山田太郎 10 2013/08/01 山田太郎 10 2014/12/01 山田太郎 10 2015/08/01 山田花子 20 2012/12/01 山田花子 20 2013/08/01 山田花子 20 2013/12/01 この際に、 山田太郎 10 2015/08/01 山田花子 20 2013/12/01 という2つの行を抽出したいですが、抽出方法がわかりません。 関数を使ってやろうとも思いましたが、関数をどれを使えばいいかわかりません。 別シートに抽出でも全く問題ありませんので、恐れ入りますが、抽出方法を教えてください。 よろしくお願いいたします。

  • WORDの差し込み印刷で印刷枚数を制御したい

    Excelに、 A B 1 山田太郎, 3 2 山田花子, 2 ・・・・ というデータを入れて、WORDの差し込み印刷をする際、 それぞれB列に入力してある数値分を印刷したいのですが。 (山田太郎の差込を3枚、山田花子の差込を2枚、というように) どなかた方法がありましたら教えてください。

  • Excelの入力規則で2列表示したい

    入力規則を使って、社員コードを入力する際に 10001 山田太郎 10002 鈴木花子 10003 佐藤大介 のように、ドロップダウンリストに「社員コード」「社員名」と2列表示させたいのです。 そして、例えば山田太郎を選択すると、セルには「10001」だけが入力されるようにしたいのですが・・・ (Accessのルックアップフィールドみたいな感じ) [入力規則]-[リスト]で、社員コード表を選択しても、単一の列または行でなければいけませんとエラーが出ます。 かといって[入力規則]-[リスト]で範囲指定をカンマ区切りで 10001 山田太郎,10002 鈴木花子,・・・と入力しても、エラーは出ませんがドロップダウンリストから選択したときに社員コード表と社員名が一緒にセルに入力されてしまいます。 なにか良い方法はありませんでしょうか? よろしくお願いいたします。

  • VBA初心者です。

    VBA初心者です。 今ユーザーフォームで入力項目などを作成し、セルに反映させようと思ったんですが。 構文エラーでが出てしまい、いまいちどこが悪いのかもわかりません・・・汗 やりたかったことは、 テキストボックス  テキストボックス 氏名        山田 太郎 住所        山田 花子 です。よろしくおねがいします。

  • エクセルについて

    エクセルについて、 山田太郎  150 154 155 156 佐藤花子  151 153 158 高橋二郎  152 159 162 163 164 165    : (それぞれ別のセルに入力) というようなシート(1)の横書きのデータをもとにして、別のシート(2)の 150 151 152 153 154 : という縦書きの数列の横に、シート(1)の対応する名前 150 山田太郎 151 佐藤花子  152 高橋二郎 153 佐藤花子 154 山田太郎  : を表示させる方法をご教授願います。 実際のデータはシート(1)、シート(2)ともに膨大なデータのため、手作業の処理は 困難な状況です。 よろしくお願いいたします。m(_ _)m

  • エクセルで重複する項目について集計しない方法

    エクセルで以下のような表があったときの集計方法です。 1日作業をして、その作業内容を記入していくような表です。 日付 名前  時間 うち 作業内容 4/1 山田太郎 8   4   集荷 4/1 山田太郎 8   3   販売 4/1 山田太郎 8   1   休憩 4/1 山田花子 7   5  集荷 4/1 山田花子 7   2  販売 この時、山田太郎さんと、山田花子さんの作業時間、8時間と7時間を集計するにはどうしたらいいでしょうか。 単純にsum関数を使用すれば、当然、データが重複してしまいます。 また、実際には多くのデータがあるので、一つ一つセルを参照して合計式は作れません。 グループ化のような方法で、小計を入れたりもせずに合計を出したいです。 宜しくお願い致します。

  • エクセルのことで質問です

    基本的な質問で、申し訳ないのですが、2つのエクセルファイルを照合し、ひとつにしたいのですが、方法がよくわかりません。 たとえば、 ファイル(1) ---------------------------------------- 姓    名   身長 山田   太郎  160 山田   花子  158 日本   太郎  172 日本   花子  150 具宇   太郎  180 具宇   花子  165 ・     ・   ・ ・     ・   ・ ・     ・   ・ ---------------------------------------- ファイル(2) ---------------------------------------- 姓名    体重 山田太郎  78 日本花子  46.5 具宇太郎  60  ・     ・  ・     ・ ---------------------------------------- を照合して、ファイル(1)に体重という項目を追加し、ファイル(2)の体重データをファイル(1)の一致する人物の体重欄に書き込みたいのです。 (もしくは、別の新規ファイルを作るという形でも構いません。) どなたか、お分かりになる方がいらっしゃいましたら、教えていただけないでしょうか? よろしくお願いいたします。

  • 【VBA ・ エクセル】 テキストファイルから特定情報をぬきだすには

    下記のようなテキストファイルから、山田太郎の後ろの数値のみを、エクセルのシートに抜き出すにはどのようにしたらよいのでしょうか。 A1セルに30、A2セルに40、A3セルに60、のように入力したいです。よろしくおねがいします。 山田太郎 30点 aaaaaa30aaaaaaaaaaa bbbbbb20bbbbbbbbbbb ccccccccccccccccccc 山田太郎 40点 ssssss30sssssss eeeeeee40eeeeeeeeee fffffffffffffffffffffff 山田太郎 60点

専門家に質問してみよう