住所録に分類をつけて、その分類毎に別のシートへコピー又は、移動を自動的にさせたいのですが、なにか良い方法がありましたら教えて下さい。まだ初心者ですが、エクセルVBAでも構いません。宜しくお願い致します。

例) 氏名 ・・ 会社名 ・・役職 ・・住所 ・・・ 分類
○○○○ ・ -なし- ・ なし ・ あああああ ・ 1 → シート2へ
×××× ・ いいいい ・ 社長 ・ えええええ ・ 2 → シート3へ
-な し- ・ ええええ ・ なし ・ おおおおお ・ 3 → シート4へ

※分割後、別シートのハガキフォームへリンクするしくみを作成中です。
上記の様に、パターンがいろいろあって、その分類毎にハガキフォームを用意して、それぞれをリンクさせようとしています。リンクの方法は、HLOOKUPを使用しています。
フォームへの宛名表示は、VBAでレコードNO指定のセル+1のプログラムを組み、これを、ボタンにマクロを登録して次のデータへ進む様に作成しています。
住所録は、登録するデータが多い為、入力の楽なエクセルで一覧(1シート)にしています。

市販のソフトやフリーソフトでは、なかなか対応出来るのがなく、ワードの差込印刷も試しましたが、1枚づつの調整が面倒でしたので、簡単なものを作成しようと思い頑張っていますが、今のところ、これしか思い付かないのですが、もっと良い方法があったらそれも教えて下さい。

説明が、下手ですみません。宜しくお願い致します。

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

A 回答 (5件)

できるまで頑張りましょう。


●まず、分類が10まであったら、シートはSheet11まで必要です。(シート数は分類数+1です)
●それに、Sheet1の1行目は表題で、空白セルはなく連続して入力されていて、そのどこかに「分類」という表題があることを前提にしています。
●マクロを動かして、開始、終了入力には半角数値で入力してください。
●標準モジュールを挿入されていれば、先頭行に「Option Explicit」と入力して動かしてみて下さい。スペルミスがあるかもしれません。

いままでに作成したシートをコピーして別名で保存して下さい。そのコピーしたシートを使用しましょう。
1.VBE画面で挿入→標準モジュールで標準モジュールを挿入します。既に標準モジュールがあって入力されていれば削除かコメント行にして下さい。
 ※コメント行にするには、表示→ツールバー→編集をチェック。出てきたツールバーの「手」の右のアイコンがコメントブロックです。既に入力した行を選んで(反転させて)コメントブロックのアイコンを押します。行頭に「'」が付いてコメントになります。
2.標準モジュールの先頭行に「Option Explicit」がなかったら「Option Explicit」を入力します。
3.ANO.#4のマクロ部分を選んでコピーして下さい。
  Public Sub から End Sub までです。
4.これを標準モジュールに貼り付けます。
 ※文章から判断して、マクロを入力されたと思いますので、スペルミスをなくすために貼り付けてください。マクロの行を見て、「xxx」と「End xxx」、「For xxxx」と「Next」に挟まれた行を選択してTABキーを押していくと見やすくなります。(インデントをつける)okwebからメールが届いていれば、そちらを貼り付ければ見やすくなると思います。
5.Excelシートに戻って、ツール→マクロ→マクロで「BunruiSheetPrint」を選んで実行します。
6.開始行と終了行を半角数値で入力してください。
うまくいきますように。

うまく動いたら
  Dim rw → Dim rw As Long '行カウンタ
  Dim br → Dim br As Integer '各データの分類
  Dim ws → Dim ws As Worksheet '印刷をするシート
に修正して下さい。今のままでも動きますが、ここはこう書くべきでした。

>やっぱり、初心者では無理ですか?
そんなことはないと思います。最初はみんな初心者ですし。ruru-Kさんもこれだけ考えていれば上達しているはずです。基本を身に付けること(本とかで)と考えることでどんどん上達していくはずです。多分もう少しで動きます。(私の方に間違いがなければ?)頑張って下さい。
    • good
    • 0
この回答へのお礼

nishi6さん!! うごきました!! ありがとうございます。感動の一瞬でした!

これから、いろんな機能等をつけて暑中見舞いに間に合うように完成させます。
HLOOLUPを使わずに、シートに飛ばせば!? と言うアドバイスを頂いたおかげでVBAの事も少しずつ分かってきました。なんだか自信がでてきました。やれば出来る! とはいっても、まだ理解できているわけではありません。もっと勉強していきたいと思います。本当にありがとうございました。

で・・・ソフトとして使い易いように、いろいろ考えているのですが、いきなり問題が出来ました。それは、各分類のシート(はがきのフォーム)を表示させて、1枚ずつ体裁を確認しながら印刷させる事も出来るようにしたい。ということです。
「(次の宛名→印刷)を繰り返していく」のように・・・

1回の質問でいろいろ聞くのも、なんだか申し訳なくなってきましたので、一旦締め切ります。この後すぐ、「 分類に分けられたシートの表示 」と言うタイトルで質問をさせていただきますので、宜しくお願い致します。

お礼日時:2001/05/03 07:46

紛らわしい表現を使ったかもしれません。

すいませんでした。「+」を使って・・・とういのは、1行目にあるデータをレイアウトの中に配置するだけという意味で使いました。私自身、別のセルにデータを入れる場合、「=」を余り使わないのでこういう表現をしてしまいました。(F10にA1のデータを入れる場合、F10には+A1としています。)
さて、ご質問の件ですが、下記VBAを作ってみました。前提としては、各分類のシートで印刷ができれば動くと思います。今は画面表示PrintPreviewにしてあります。PrintOutにすれば印刷できるはずです。簡単な範囲指定・入力チェックも入れておきました。処理自体はだいぶ単純化されたと思いますがどうでしょうか?何か不具合が合ったら補足してください。

Public Sub BunruiSheetPrint()
Dim ws1 As Worksheet 'Sheet1
Set ws1 = Worksheets("Sheet1")
Dim BunruiCol As Integer '分類が入力された列(A列からのカウント)
Dim columnMax As Integer '列数(データ項目数)
Dim cl As Integer '列データ用カウンタ
'分類の列位置、データ列数を調べる
With ws1
With .Range("A1")
While .Offset(0, cl) <> "" And BunruiCol = 0
If .Offset(0, cl) = "分類" Then
BunruiCol = cl
End If
cl = cl + 1
Wend
End With
columnMax = .UsedRange.Columns.Count
End With

Dim dmy As String '入力用ワーク文字
Dim startRow As Long '開始行
Dim lastRow As Long '最終行
'印刷開始から最終行を入力(このあたりは処理例です。)
dmy = InputBox("印刷開始行を入力します")
If dmy <> "" Then startRow = Val(dmy)
dmy = InputBox("印刷最終行を入力します")
If dmy <> "" Then lastRow = Val(dmy)
'開始<=最終 ? (これもチェック例です)
If Not (startRow <= lastRow) Then
MsgBox "エラー", vbOKOnly, "誤入力": Exit Sub
End If
'
'各シートに飛ばす(Sheet2から。Sheetは連番)
Dim rw '行カウンタ
Dim br '各データの分類
Dim ws '印刷をするシート
Application.ScreenUpdating = False 'シート表示を固定
With ws1.Range("A1")
For rw = startRow To lastRow '指定した範囲を印刷
br = .Offset(rw, BunruiCol) + 1 'シート番号を求める
Set ws = Worksheets("Sheet" & br) 'シートを決定
For cl = 0 To columnMax '1行分目的のシートに書く
ws.Range("A1").Offset(0, cl) = .Offset(rw, cl)
Next
ws.Activate
'PrintPreview を PrintOut に変えれば印刷を実行
ActiveSheet.PrintPreview
Next
End With
Application.ScreenUpdating = True 'シート表示の固定解除
ws1.Activate 'Sheet1を表示
End Sub

この回答への補足

nishi6さん、回答ありがとうございます。
すみません理解できません! とりあえず、VBAを打ち込んでみましたが、うまくいきません。エラーで、デバックをクリックすると 「br = .offset(rw,BunruiCol)+1'シート番号を求める」 のところの行に網掛けが出ます。なぜでしょうか?

やっぱり、初心者では無理ですか? 何度もお尋ねして申し訳ございませんが、もし、初心者でも出来る範囲でしたら、もう少し詳しく教えていただけませんでしょうか? 私も、もっと勉強してみますので、宜しくお願い致します。

補足日時:2001/05/01 16:09
    • good
    • 1

>よろしかったら送り込みの方法を教えていただけませんでしょうか?


しばらくお待ち下さい。

この回答への補足

承知致しました。待ちます。
とりあえず、私もいろいろ試してみます。試してはいますが、今のところエラーばかりで、全く前に進んでいません。宜しくお願い致します。

補足日時:2001/04/27 18:03
    • good
    • 0

>移動を自動的にさせたいのですが


に対して、下記のVBAを書いてみました。参考にして下さい。詳細が分からないので条件があります。
1.データはSheet1にある
2.Sheet1の1行目は表題になっており(A1から)、全ての列に入力されていて、どこかに「分類」という表題がある。
3.「分類」列は全てのデータについて入力されていて1からシート数-1以下である。
注1)転記するシートには2行目から書いています。
注2)分類が増えたらシートを増やします。VBAは修正不要です。
注3)データの増減、修正がある場合、Sheet2以降はデータをクリアする必要があります。
  (これがあるためこの方法には抵抗があります。初期化すればいいんですが)

Public Sub Sheet2Sheet()
Dim BunruiCol As Integer '分類が入力された列(A列からのカウント)
Dim columnMax As Integer '列数(データ項目数)
Dim rowMax As Integer '行数(データ数)
Dim cl, rw As Integer 'カウンタ
Dim wRw(255) As Integer '各シートで書いた行番号(2行目からスタート)
'分類の列位置、データ列数・行数を調べる
With Worksheets("Sheet1")
With .Range("A1")
While .Offset(0, cl) <> "" And BunruiCol = 0
If .Offset(0, cl) = "分類" Then
BunruiCol = cl
End If
cl = cl + 1
Wend
End With
columnMax = .UsedRange.Columns.Count
rowMax = .UsedRange.Rows.Count - 1
End With
'各シートに転記
Dim br '各データの分類
With Worksheets("Sheet1").Range("A1")
For rw = 1 To rowMax
br = .Offset(rw, BunruiCol) + 1
For cl = 0 To columnMax
Worksheets("Sheet" & br).Range("A1").Offset(wRw(br) + 1, cl) = .Offset(rw, cl)
Next
wRw(br) = wRw(br) + 1
Next
End With
End Sub

>もっと良い方法があったらそれも教えて下さい。
に対して、私なりの感想ですが(やるとしたらこうします)
(1)分類数に対応するハガキフォームを先に作ってしまいます。各シートは1分類としSheet2から作ります。1行目(A1から)にデータを適当に入力しておき、それを「+」を使ってレイアウトに編集していきます。肝心なのはここをいかにシンプルに作るか、分類が増えた場合も考え簡単に対応できるようにしておきます。
(2)できたハガキフォームの印刷範囲をシート単位で決定します。
(3)後は、上記VBAのように各シートに移動させるわけすが、該当シートに1件単位に書き込み(1行目に)→そのシートをアクティブに→印刷 を繰り返していきます。VBAは当然、シート数が増えても手を入れなくていい作りにします。(上記VBAもそうです)
(4)印刷時は全件印刷や指定印刷が必要でしょうからその機能を付加します。
ざっと書きましたが、印刷はExcelに任せ、1件を該当シートに送ってやれば、1シート1分類、1データとなりリンクもHLOOKUPも不要な気がします。
長々と書いてしまいました。がんばってください。

この回答への補足

大変参考になる回答をありがとうございます。
早速、試してみましたところ、うまくいきました。が・・・
ご意見いただきました通り、1件を該当するシートへ送る方法で進めたいと思います。
その内容について詳しく知りたいのですが、現在、ハガキのフォームはできました。ただ、1行目にデータを適当に入力しておき、「+」でレイアウトに編集?と言う部分が良く分かりませんでした。(とりあえずフォームは出来てますが・・・)ここまでは何とかうまくいってますが、そのフォームにそれぞれの該当データを、HLOOKUPを使用せずに送り込む作業をしているのですが、なかなかうまくいきません。私の単なる知識不足でしょうが・・・
VBAに関して、初心者なものですみません!よろしかったら送り込みの方法を教えていただけませんでしょうか?よろしくお願い致します。

補足日時:2001/04/25 18:17
    • good
    • 0

ruru-kさんこんにちは。


見たところ、ずいぶんややこしいなぁと思いましたが、私も似たようなことをやっています(笑)。私の場合、各シートごとに色々なフォーマットを作ったら半端じゃないファイル容量になったので、データだけ1つのシートにまとめて、マクロで、値のみを各シートに貼り付けていくというものです。各シートには参照式や関数などがあって、値が貼り付けられると同時に、計算結果が表示される仕組みです。おおかた、同様の内容ではないでしょうか・・・。
さて、やはりVBAを使った方がよさそうです。そしてポイントになると思われるステートメントを2つを述べます。
まず、”分類”のフィールドに入力された数値をキーとして、各シートに配分されるようですが、"For ~ Next"ステートメントと、"Select Case ~ End Select"ステートメントを使ってはいかがでしょう。例えば列Eの値を1行目から順々に調べていくパターンだと・・・。

Sub test()
'---5列目の最下段を取得
n = Range(Cells(ActiveSheet.Rows.Count, 5).End(xlUp).Address).Row + 1
'---5列目の値ごとに処理を分岐
For i = 1 To n
Select Case Cells(i, 5).Value
Case 1: MsgBox "シート2へコピーするマクロ"
Case 2: MsgBox "シート3へコピーするマクロ"
Case 3: MsgBox "シート4へコピーするマクロ"
Case Else
End Select
Next i
End Sub

なんてコード例が考えられます。
ハンドラとして記入したMsgBoxの所には実際のマクロやマクロ名(サブルーチンの場合)を入れてください。"シート?へコピーするマクロ"なる部分は、自動記録なんかで作成できるでしょうし、CopyやPasteなどをキーワードにヘルプで調べてください。

この回答への補足

TTakさん ありがとうございます。
はやりややこしいことなんですね!VBAについて初心者なのでなかなか思うようにいきません。参考にさせていただきながら思考錯誤しています。少しずつですが分かってはきているのですが、1歩進んでは、3歩下がり、ってかんじです。とりあえず完成させたいので頑張ります。なにかヒントがあったらまたお願いします。

補足日時:2001/04/25 18:36
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

QACCESSのフォームを使っての住所録の検索なのですが,

Accessのフォームを使って住所録から,データを抽出し,その結果をまず表示,その後ラベルシールに印刷をしたいのですが,フォームでの検索は,テーブルのすべての項目について複数の項目を同時検索をできるようにしたいです。
テーブルの構造はごく普通の住所録です。データ件数は8万件ほどです。
どういう方向で作業を進めるべきか分からないのですが,こういった場合は,まず,検索用のフォームを作成し,コマンドボタン(検索・印刷)を配置して,
それに対してイベントかマクロの記述をするんだろうなとは思うのですが・・・
私が思うに,抽出結果を格納するテーブル・検索フォーム・ラベル印刷用のレポートが必要なのだろうと思いますが,それらが何でつながっていくのかが分かりません。参考書などでは,一つ一つのことが別々に書いてあって作業の全体像が分かりません。作業の方向と必要なスキルが同程度などか詳しい方教えてください。

Aベストアンサー

まず、検索結果を格納するテーブルはなくても大丈夫ではないでしょうか。

色んな方法が考えられますが、自分だったらこうするという方法で...

仰るとおり、検索用のフォームを作成します。検索結果のフォーム、ラベル用のレポートは条件を考えずに全部のレコードを表示するようなレコードソースでいいと思います。検索条件になるフィールドは全部持たす必要がありますし、フォームやレポートに表示する必要がなくても、非表示で配置して下さい。

検索条件フォームで入力した条件を元に、検索ボタンのクリック時のイベントプロシージャで
Dim strWHERE As String
strWhere=""
strWhere=strWhere &"([名前] ='"& forms![F_検索条件]![名前] &"')"
strWhere=strWhere &"AND (都道府県='"& forms![F_検索条件]![都道府県] & "')"
みたいなWHERE句を生成し、その条件で検索結果のフォームをOpenFormで開きます。

ラベル印刷ののレポートも同様ですね。検索結果から印刷するようにするのでしたら、検索結果のフォームに印刷ボタンを配置して、そのクリック時のイベントプロシージャでOpenReportのWHERE句の引数部分に上記の条件を指定して下さい。

まず、検索結果を格納するテーブルはなくても大丈夫ではないでしょうか。

色んな方法が考えられますが、自分だったらこうするという方法で...

仰るとおり、検索用のフォームを作成します。検索結果のフォーム、ラベル用のレポートは条件を考えずに全部のレコードを表示するようなレコードソースでいいと思います。検索条件になるフィールドは全部持たす必要がありますし、フォームやレポートに表示する必要がなくても、非表示で配置して下さい。

検索条件フォームで入力した条件を元に、検索ボタンのクリ...続きを読む

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

Q住所録作成に郵便番号で住所を記入したい

Microsoft Outlook 2003の連絡先の住所を郵便番号を使って記入する方法がありませんか。ハードディスクがパンクしたため至急作成したい。

Aベストアンサー

IMEの郵便番号辞書を利用するくらいでしょうか?
IMEのプロパティで、辞書探して、郵便番号辞書にチェック
つきからは、全角で郵便番号いれて、
スペースキーおすと漢字変換の中で住所が出てきます。

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

Qアクセスの住所録に増分の住所データを追加するには

エクセルで作られた表(住所録)を元にアクセスで顧客データを管理していますが、一月に100件から150件増えたり減ったりします。もらったエクセルのデータをアクセスに反映させて更新するにはどうしたら良いか分からず困っています。
 一件づつ入力するのは面倒なので良い方法があったら教えてください。
 お願いします。

Aベストアンサー

アクセスの項目の並びとエクセルの項目の並びが同じならコピー&ペーストでできると思います。同じでないなら一旦エクセルの表をインポートしてアクセスの表にして、その表を追加クエリーで住所録に追加すればいいと思います。

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

Qユーザーフォームのデータを他のシートへコピーしたいのですが

オフィス2003VBAでユーザーフォームのスプレッドシートにあるデータを別のシートにコピーをしようとしています。
マクロを実行すると、以下のコードがエラーとなってしまいます。
どう直せばよいか教えていただけないでしょうか?
できればクリップボードの経由なしでコピーをしたいです。
よろしくお願いします!


Spreadsheet1.Range(Cells(V1_row + 1, V1_col), Cells(V1_row + 2880, V1_col)).Copy _
ThisWorkbook.Worksheets(\"04-02_cbt\").Range(\"B8\")

Aベストアンサー

こんにちは。

無理じゃないかな。SpreadSheet って Office Web Compornents の OCX
コントロールですよね? コントロールの追加で言えば、

  Microsoft SpreadSheet x.x  (x はバージョンを示す)

のこと?

これは同じ Microsoft 製品だとしても Excel.exe とは別物ですから、
同じようなプロパティー、メソッドを備えているとしてもごちゃ混ぜには
できません。

実際に試して、Copy メソッドの名前付き引数 Destination に Excel.exe
配下の Range を指定できないのなら、そういうもの(仕様)なのでしょう。

> できればクリップボードの経由なしでコピーをしたいです。

なぜ?

クリップボード経由なら簡単にできますよね?

クリップボードで何か特殊なことを同時に行うため干渉されたくない、、
などの事情がない限り、拘る意味がない気がします。

' // クリップボードを使って転記する例(一部書式もコピーされる)
Private Sub CommandButton1_Click()

  Spreadsheet1.Worksheets("Sheet1").Range("A1:C2").Copy
  Worksheets("Sheet1").Range("A1").PasteSpecial

End Sub


一応、Variant 型配列を使うという手もありますけど、値のみのコピーに
なりますし、オンメモリという点ではクリップボード経由と差がありません。

' // 配列を使って値を転記する例
Private Sub CommandButton1_Click()
  
  Dim v As Variant
  v = Spreadsheet1.Worksheets("Sheet1").Range("A1:C2").Value
  Worksheets("Sheet1").Range("A1").Resize(UBound(v), UBound(v, 2)).Value = v
  
End Sub

それから余談になりますが、、

> Spreadsheet1.Range(Cells(V1_row + 1, V1_col), ...以下略

ではダメですよ。コピー元として SpreadSheet1 配下の Range を指定したい
のであれば、

  ・Worksheet の指定が必要
  ・Range 内 の Cells にも親オブジェクトの装飾が必要

です。例えばこんな感じ。

With Spreadsheet1.Worksheets("Sheet1")
  .Range(.Cells(V1_row + 1, V1_col), .Cells(V1_row + 2880, V1_col)).Copy
End With

のように。装飾を省略すると Excel.exe の ActiveSheet が自動補完されてしまい
ますから、SpreadSheet 配下のモノなのか、Excel 配下のモノなのかに留意
して下さい。

こんにちは。

無理じゃないかな。SpreadSheet って Office Web Compornents の OCX
コントロールですよね? コントロールの追加で言えば、

  Microsoft SpreadSheet x.x  (x はバージョンを示す)

のこと?

これは同じ Microsoft 製品だとしても Excel.exe とは別物ですから、
同じようなプロパティー、メソッドを備えているとしてもごちゃ混ぜには
できません。

実際に試して、Copy メソッドの名前付き引数 Destination に Excel.exe
配下の Range を指定できないのなら、そういうもの(仕...続きを読む

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

QACCESS サブ・メインフォームのリンク方法を教えてください。

ACCESS2000で、サブ・メインフォームともクエリからのデーターになります。フォーム上にサブフォームは作成できたのですが、リンクしてません。参考書には、リンク子・親フィールドに結びつける項目名を入力と書いているのですが、プロパティをひらいても、子・親フィールドの項目がありません。

素人が参考書片手に、作成しているもので、専門用語が、いまひとつよくわかりません。お手数ですが、よろしくお願いします。

Aベストアンサー

1)メインフォームをデザインビューで開く
2)プロパティシートを開き、「データ」タブをクリック
(プロパティシートは、メニューの「表示(V)」→「プロパティ(P)」か、コントロールなどの右クリックメニューから開けます)
3)サブフォームをクリック
(このとき、間違ってサブフォーム内のコントロールにフォーカスを当てないように、サブフォームの輪郭をクリック)
4)「リンク子フィールド」にサブフォームのフィールドを、「リンク親フィールド」にメインフォームのフィールドかコントロールを、それぞれ指定
(双方を複数指定する場合は、「リンク子/親フィールド」のどちらかにカーソルを合わせたときに右端に表示される「・・・」(ビルダ)ボタンをクリックして、指定)

サブフォーム内のテキストボックスなど、サブフォーム自体以外にフォーカスがあると、「リンク子フィールド」等は表示されませんので、ご注意を。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報