エクセル97を使っています。
Sheet1に既に作られた顧客のデータをSheet2の表に挿入したいのですが、
データシートは1行で1名分なのに対し、表シートは2行で1名分になっています。例えば、
Sheet1 の A1 が Sheet2 の A1 に入り、
Sheet1 の A2 が Sheet2 の C1 に入り、
Sheet1 の A3 が Sheet2 の A2 に入り、
Sheet1 の A4 が Sheet2 の B2 に入り・・・
といった具合に、Sheet1と2では項目もバラバラです。
= の前に ' を付けて後で区切り位置で変換する、という方法を以前こちらで教えていただいたのですが、うまくマクロを作ることが出来ません。
更に、顧客データの数の変動が激しいので、表シートの行数をデータの数の分だけ自動に増やしたいのですが、やり方が見つかりません。

すみませんが、どなたかアドバイスをお願い致します。

A 回答 (2件)

質問の意味がつかみ切れないため、かなり想像しての回答です。

要は1行のデータを2行に振り分ければいい?
>Sheet1と2では項目もバラバラです
とありますが、顧客単位では振り分け方法は同じとしています。パターンがなければお手上げです。また、
>データシートは1行で1名分なのに対し、表シートは2行で1名分になっています
とありますが、質問の例示では4名分が2行になっているように思えます。Sheet1のA1、A2、A3、A4はA1、B1、C1、D1として考えています。これが違っていれば下記モジュールは破棄して下さい。また、
>更に、顧客データの数の変動が激しいので
は、データの追加のことだと解釈しました。下記で一応対応できます。しかしシート1で行削除してもシート2は変化しません。シート2をクリアして全件書き直せば大丈夫でしょう。

下記マクロにはdtNumに項目数を、Sht1Adr、Sht2Adrに項目数分のセルの対応を設定します。
標準モジュールに貼り付け、シート1のシート2に振り分ける開始行を選択して実行します。全件書き出すなら1行目を選択して実行します。
ご参考に。

Public Sht1Adr() As String 'Sheet1のセル位置(1行目)
Public Sht2Adr() As String 'Sheet2のセル位置(1行目と2行目)
Public Const dtNum = 4   'データ項目数をセットする

'シート2に振り分けるシート1の開始行を選択して実行
'=== シート1の1行目を選択していれば全件振り分け
'=== シート1の追加開始行を選択していればシート2に追加
'=== 削除は対応していないので、いつも全件振り分けがベストか
Public Sub Sheet1_To_Sheet2()
  Dim ws1 As Worksheet, ws2 As Worksheet  'シート1、2
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

  ReDim Sht1Adr(dtNum) As String      'シート1の1行目のデータ位置
  ReDim Sht2Adr(dtNum) As String      'Sht1Adr()に対するシート2の位置
    Sht1Adr(1) = "A1": Sht2Adr(1) = "A1" '==シート1のA1をシート2のA1に書く
    Sht1Adr(2) = "B1": Sht2Adr(2) = "C1" '==シート1のB1をシート2のC1に書く
    Sht1Adr(3) = "C1": Sht2Adr(3) = "A2"
    Sht1Adr(4) = "D1": Sht2Adr(4) = "B2" '以下、データ項目数分書き込む
    'Sht1Adr(5) = " 1": Sht2Adr(5) = " 2" '  ↓

  Dim rwStart As Long  'シート2に振り分けるシート1の開始行
  Dim rw As Long     'シート1の行
  Dim col As Integer   'シート1の列
  rw = Selection.Row
  While Cells(rw, 1) <> "" 'シート1のA列にデータがあるだけ繰り返す
    For col = 1 To dtNum
      ws2.Range(Sht2Adr(col)).Offset(rw * 2 - 2, 0) _
          = ws1.Range(Sht1Adr(col)).Offset(rw - 1, 0)
    Next
    rw = rw + 1
  Wend
End Sub
    • good
    • 0
この回答へのお礼

質問が下手で大変申し訳ありませんでした。
丁寧にご回答を頂き、ありがとうございました。
作って頂いたマクロをそのまま貼り付けて、必要個所を直して実行してみたのですが、うまくいきませんでした。
まだマクロは初心者なので、もう少し勉強してからまた改めてご質問させて頂きたいと思います。

お礼日時:2001/10/31 23:23

具体的に「sheet1データ」と「sheet2表」との関連づけがよく分かりませんので何とも言えないのですが。


こちらの勝手な想像ですが、sheet1に入力したデータを元に、sheet2の印刷用の表等を作成すると言うことで考えると、 sheet1の項目とsheet2表の位置関係はバラバラではなく、有る一定のルールが有ると思うので、そのルールで、sheet1のデータを読み込んで、sheet2の表に順次転記する様なマクロを考えればよろしいのではないのでしょうか。
    • good
    • 0
この回答へのお礼

説明が下手で、大変申し訳ありませんでした。
アドバイスを頂き、ありがとうございました。

お礼日時:2001/10/31 23:17

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

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

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

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

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

Aベストアンサー

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

QExcel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

Excel2000です。

Sheet1のA列・B列・C列・・・にデータが入っています。
Sheet2のA列・B列・C列・・・にデータが入っています。

Sheet1のA列とSheet2のA列は、似たようなデータが入っています。
Sheet1のB列とSheet2のB列も、同様です。
C列以降のデータは、シート間で全然関係ありません。

Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、
を知るには、どうすればよいですか。
C列以降の列のデータは、比較する際に使いません。

つまり、
Sheet1のA = Sheet2のA
かつ
Sheet1のB = Sheet2のB
であるような行を知りたいのですが、

どうすればよいのでしょうか。

Aベストアンサー

Sheet1、Sheet2 ともに空いている列に =A1&B1 のような連結データを作り、Matchなどで比較するとか、、、

Sheet1 の E1 =A1&B1
Sheet2 の E1 =A1&B1
Sheet1 の F1 =MATCH(E1,Sheet2!E:E,0)

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=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

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【エクセル】 sheet1のA1~Z1のデータを sheet2のA1~A26に入れたいのですが。

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

【エクセル2003での質問】
横に並んだデータを縦にしたいのですが、どのようにすればよいのでしょうか。

例えば、
sheet1のセルA1からZ1の間に26個の数値が入力されています。
これを、sheet2のセルA1からA26の中に表示させるとしましたら、
どのような方法があるでしょうか?

ご教示のほどよろしくお願いいたします。

Aベストアンサー

データをコピーするだけなら「形式を選択して貼り付け」で "縦横を入れ替える" 設定で貼り付ければOK

更新されるデータを常に参照したいのであれば参照コピーですね
一つずつ参照先を設定しても たかが 26箇所です
そんなに時間は掛かりません

または関数でそれっぽく作って見ましょうか?
Sheet2のA1セルに関数を一つ入力して、A26セルまでコピーすれば良い形で作ると
COLUMN関数とINDIRECT関数を使うことになります
 =COLUMN(範囲)
 =INDIRECT(参照文字列,参照形式)
とそれぞれ使います
 =INDIRECT("A"&COLUMN(A1))
これでOK


※ それぞれの関数の詳細は Excelのヘルプまたは関数ウィザードを参照してください

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関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

QExcelでシート2のデータ(A1からA10)をシート1(A10からA1)に反映させるには・・・。

いつもお世話になっています(_ _)
シート2のデータ(A1からA10)をシート1の(A10からA1)(シート2は上からに対してシート1は下から上へ)データを反映(=のかたちでシート2と同じ数字がシート1のも入るように)したいのですが・・・。

わかりにくいですね・・・。
もし補足の要求があればすぐに書き込みますのでよろしくお願いします。

Aベストアンサー

こんにちは

コピーですむような者ですね。

=INDEX(Sheet2!$A$1:$A$10,11-ROW(),1)

をSheet1のA1セルからA10セルにコピーペーストして見てください。
もし、Sheet2の値が空白だった場合、Sheet1も空白にするのであれば、

=IF(INDEX(Sheet2!$A$1:$A$10,11-ROW(),1)="","",INDEX(Sheet2!$A$1:$A$10,11-ROW(),1))

で良いですね。

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),"")を設定
   入力文字列が存在しない場合は空白としています。

Qsheet1のA1に数値を入力するとsheet2のA1に自動で転記した

sheet1のA1に数値を入力するとsheet2のA1に自動で転記したいのです。ですが、sheet1のA1に何も入れて無い場合でもsheet2のA1に=sheet1!A1を使うとゼロが記載されます。これを空白にしたいです。もう一つsheet2のA1を空白にした後同じようにsheet1のA2をsheet2のA2に転記し(ゼロの場合は空白)sheet2のA1+sheet2のA2をsheet2のA3に出したいのです。(sheet2のA3がゼロの場合は空白)判る方御手数ではあろうかとは思いますがよろしくお願いいたします。

Aベストアンサー

こんばんは!
一例です。
当方使用のExcel2003の場合ですが、
Sheet2のメニュー → ツール → オプション → 表示タブで
「ゼロ値」のチェックを外してはどうでしょうか?

そしてSheet2のA1セルは
=Sheet1!A1 としてセルの右下にマウスポンタを移動させると
(+)マークになるところ(フィルハンドルといいます)がありますので
そこでA2セルまでドラッグします。
そうするとSheet2のA2セルは 
=Sheet1!A2 となります。

最後にA3セルは
=A1+A2
ではどうでしょう?

以上、参考になれば幸いです。m(__)m


人気Q&Aランキング