• ベストアンサー

VBAで

sheet2のE3(得意先名)とE4(得意先コード)をコピーして sheet1のA3へE4+E3(得意先コード得意先名)で貼付けってできますか?

  • LINERS
  • お礼率92% (241/261)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

LINERSさん、こんばんは。 私に答えられることでしたら、この際、まとめて答えておきます。(^^; >一覧表に追加された得意先名(+コード)に新規で出来上がったシートへのハイパーリンクを設定することは可能でしょうか? 10人中9人までは、ハイパーリンク付けしていますね。(他は、コマンド・ボタンをつけたり、ダブルクリック・イベントをつけたりする人がいます。) ハイパーリンクは、ちょっとややこしいですね。 たぶん、以下のようにすればできると思います。なお、得意先名は、追加式になっています。 最後、Protect は、シートをSelectしなくても、たぶんできるはずです。 Sub test2()  Dim myRng As Range, a  Sheets("新規").Copy before:=Sheets(4)  With ActiveSheet   .Unprotect   得意先シート登録.Show   .Name = .Range("A4").Value & .Range("A3").Value   .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True   Set myRng = Sheets("一覧").Range("A65536").End(xlUp).Offset(1)   myRng.Value = .Range("A4").Value & .Range("A3").Value   Sheets("一覧").Hyperlinks.Add _       Anchor:=myRng, _       Address:="", _       SubAddress:=myRng.Value & "!A1", _       TextToDisplay:=myRng.Value End With Sheets("一覧").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

LINERS
質問者

お礼

大変感謝しております。 おかげ様でVBAとの距離が少し縮まった気がしてます。 いただいたコードも問題なく稼動し、尚且つすっきりまとまったので、これに肉付けしたりしてやっていこうと思います。 多分本日も質問を上げると思いますが、宜しければお付き合いください。 この質問はいったん閉めますが、今、シート(一覧)に新たに追加された得意先の行に書式を既存の得意先の行から移そうと思って挑んでいます。(すぐ質問しそうな状態ですが) 本当に有難うございます。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

読んでもよくわからないのですが、後に読む方のために整理すると (1)得意先名と得意先コードを一覧にした表を作る。    普通はA3、A4でなく、A列得意先名、B列得意先コードを入れるのではないですか。 A列    B列 大田産業  101 山田工業  102 ・・・ (2)その得意先名と得意先コードを合成した名前で、新しい1得意先1シートのシートを作る。 Sub test02() i = 1 ActiveSheet.Name = Worksheets("Sheet1").Cells(i, "A") & Worksheets("Sheet1").Cells(i, "B") End Sub iは行によって変化させる。 (3)そのシートは「新規」という名の既存のシートをコピーして作る。 Sub test04() Sheets("新規").Copy after:=Sheets(2) ActiveSheet.Name = "aaa" End Sub "aaa"のところを(2)のやり方で毎回変える (4)フォームで得意先名と得意先コードを入れる 難しい途を選んでいる。勉強にはなるだろうが初心者には難しい方法 。 Sheet1のユーザーフォームにテキストボックス2つとコマンドボタンを貼り付ける。 Public i Private Sub CommandButton1_Click() Worksheets("Sheet1").Cells(i, "A") = UserForm1.TextBox1.Text Worksheets("Sheet1").Cells(i, "B") = UserForm1.TextBox2.Text i = i + 1 End Sub Private Sub UserForm_Initialize() i = 1 End Sub (5)欲を言えば一覧のシートの得意先名をクリックするとそのシートに 飛びたい。 (5)はハイパーリンクのほかに、素朴に Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error GoTo errrtn Dim sn As String If Target.Column = 1 Then sn = Target.Value MsgBox sn & "を選びました" Worksheets(sn).Activate ActiveSheet.Range("A1").Select End If Exit Sub errrtn: MsgBox "シート見つからず" End Sub で飛びます。  本質問に必要なスキルの一例を挙げてみました。 総合したものをあげたいが、時間がないので省略。

LINERS
質問者

お礼

ご解答感謝します。補足にあげた内容の今現在のコードです。 Sub 得意先追加() Sheets("一覧").Unprotect Dim myRng As Range, a Sheets("新規").Copy before:=Sheets(4) With ActiveSheet .Unprotect 得意先シート登録.Show .Name = .Range("A4").Value & .Range("A3").Value .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Set myRng = Sheets("一覧").Range("A65536").End(xlUp).Offset(1) myRng.Value = .Range("A4").Value & .Range("A3").Value Sheets("一覧").Hyperlinks.Add _ Anchor:=myRng, _ Address:="", _ SubAddress:=myRng.Value & "!A1", _ TextToDisplay:=myRng.Value End With Sheets("一覧").Select Range("A4").Activate Selection.End(xlDown).Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub 本日もこのブックのことで質問を出すと思いますのであげておきます。 超初心者なもので、質問文まで支離滅裂ですがどうぞ宜しくお願いします。 アップしていただいたコードの方も実行したいのですが、フォームはsheet1ではなく各得意先シートにあるのではなく得意先追加実行中に表示させるような形にあり、そこで実行させるためにどうしたら良いか今はわからないので、じっくり勉強させていただきます。 貴重な時間を割いていただき本当に有難うございました。 この質問は一旦閉じますが、本日も質問をあげると思いますので、どうぞ宜しくお願いします。

LINERS
質問者

補足

>読んでもよくわからないのですが~ すみません。質問文もうまくまとめられなくて皆様にも理解しがたくなってしまいました。うまくまとめていただき感謝しております。 ただ、今後もこのブックのコードに関して質問をあげると思いますので一部訂正で >(1)得意先名と得意先コードを一覧にした表を作る。    普通はA3、A4でなく、A列得意先名、B列得意先コードを入れるのではないですか。 >(2)その得意先名と得意先コードを合成した名前で、新しい1得意先1シートのシートを作る。 得意先一覧という得意先コードと得意先名の一覧のシート1がまずあります。そして2枚目以降に各得意先の各月の売上等を入力していくシートが1得意先に対して1シートづつあります。 得意先が追加されたときに得意先追加というコマンドボタンを押すと、シートの一番後ろにある”新規”シート(テンプレートとして存在しています。)をコピーする形で作成、このときに得意先追加のマクロを実行中に得意先シート登録というフォームから得意先名と得意先コードをそれぞれA3・A4へ代入し、代入されたものをA4+A3[得意先コード得意先名](順序が変わります)にしてシート名とし、尚且つ一覧シートの表へそのシート名(A4+A3)の方を追加及びハイパーリンク設定。 こういうことになってます。(皆様のおかげです。)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>後、よろしければ、これ↓はどういう意味か教えてください。 その部分をフルに書くと Sheets("一覧").Range("A65536").End(xlUp).Offset(1).Value = _  .Range("A3").Value & .Range("A4").Value となりすまが、 A列のデータの最後尾に、データを貼り付ける、という意味です。 つまり、A列の65536 行目から、「Ctrl+ ↑」とすれば、データの最後の行に行きますね。それをひとつ下がれば、データの継ぎ足しできるというわけです。

LINERS
質問者

お礼

ということはデータがA50まで入っていたらA51を指定する。・・ すごいっすね。 勉強になりました。 ちなみにもうひとつ・・良いでしょうか? 今までの流れで、新規で作った得意先シートへ得意先名と得意先コードをフォームより代入し、それをシート名へ書き込み、その後一覧シートへ移り、一覧表へその得意先名(+コード)を追加するところまでは出来ました。・・これからなんですが、一覧表に追加された得意先名(+コード)に新規で出来上がったシートへのハイパーリンクを設定することは可能でしょうか? コードとは言いません。これまでの流れで可能かどうか知りたいのです。 有難うございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

前回のものを読んでいれば、そのつながりは分かります。 >Range("E3")&Range("E4"),value(copy?)で始まって良いのでしょうか? 私のは、With ステートメントと「.(コンマ)」を使って、無駄な部分を省略しています。 それから、 Sheets("一覧").Range("A3").Value = ... 常に同じ場所に入れるのですか? もしかしたら、   Sheets("一覧").Range("A65536").End(xlUp).Offset(1).Value = _ ではないでしょうか?同じ場所に入れるのですか? 必要に応じて書き換えてください。 ためしに作ってみました。 '-------------------------------------------- Sub 得意先追加()  Sheets("新規").Copy Before:=Sheets(4)  With ActiveSheet   .Unprotect   得意先シート登録.Show   .Name = .Range("A4").Value & .Range("A3").Value   .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True   Sheets("一覧").Range("A3").Value = _       .Range("A3").Value & .Range("A4").Value End With End Sub UserForm は、以下のようにしました。 Private Sub CommandButton1_Click()  Range("A3").Value = Me.TextBox1.Value  Range("A4").Value = Me.TextBox2.Value  Unload Me End Sub

LINERS
質問者

お礼

ご解答感謝します。 直しました。 Sub 得意先追加() Sheets("一覧").Select ActiveSheet.Unprotect Rows("4:4").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow Range("A4").Select Sheets("新規").Copy Before:=Sheets(4)  With ActiveSheet   .Unprotect   得意先シート登録.Show   .Name = .Range("A4").Value & .Range("A3").Value   .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True   Sheets("一覧").Range("A3").Value = _       .Range("A3").Value & .Range("A4").Value End With Sheets("一覧").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub 後、よろしければ、これ↓はどういう意味か教えてください。 Sheets("一覧").Range("A65536").End(xlUp).Offset(1).Value = _ 有難うございました。

LINERS
質問者

補足

>Sheets("一覧").Range("A3").Value = ...常に同じ場所に入れるのですか? アップしたコードは省略していまして。([]内を省略してました。) Sub 得意先追加() [Sheets("一覧").Select ActiveSheet.Unprotect Rows("4:4").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow Range("A4:E4").Select Range("E4").Activate Selection.Copy Range("A3").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Range("A3").Select] Sheets("新規").Select~

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

Sub testcopy() With Worksheets("Sheet2")  Worksheets("Sheet1").Range("A3").Value = _   .Range("E3").Value & .Range("E4").Value End With End Sub 前回の書き込みから見ていましたが、それから、文字列の場合は、「&」 は、「+」と書いても間違いではありません。また、Text プロパティは、書式に影響を受けますが、Valueプロパティは、書式には影響を受けずに、値を渡すことができます。

LINERS
質問者

お礼

すみませんコピーしたい値のセルはE3&E4ではなくA3&A4でした。

LINERS
質問者

補足

いつも有難うございます。おかげ様で大変勉強になっています。 #1さんの補足に上げましたが、シート名をコード上で記述できません。 なので、新規シートを作っている状態の時に一覧シートのA3へE3&E4を貼り付けたいのです。 そのときは Range("E3")&Range("E4"),value(copy?)で始まって良いのでしょうか? すみませんよろしくお願いします。

  • ctrlzr
  • ベストアンサー率29% (18/62)
回答No.1

worksheets("sheet1").Range("A3").value = worksheets("sheet2").Range("E3").value & worksheets("sheet2").Range("E4").value

LINERS
質問者

お礼

すみませんコピーしたい値のセルはE3&E4ではなくA3&A4でした。 お礼の欄を使って訂正させていただきます。

LINERS
質問者

補足

ご解答感謝します。 質問文に言葉が足りませんでした。 今、 Sub 得意先追加() Sheets("新規").Select Sheets("新規").Copy Before:=Sheets(4) Sheets("新規 (2)").Select ActiveSheet.Unprotect 得意先シート登録.Show[ここでA3へ得意先名、A4へ得意先コードを代入させています] ActiveSheet.Name = Range("A4").Text & Range("A3").Text [ここに質問のコードを入れたい] Sheets("一覧").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub という状態です。 質問文でいうsheet1が一覧でsheet2(これは”新規”をコピーして作った新しいシートです。)はフォームで得意先名と得意先コードをE3、E4へ代入し、それをシート名にするようにしています。 この状態で質問文のようにする場合にはどうすればよいですか? 文章が支離滅裂ですがよろしくお願いします。

関連するQ&A

  • INDEX,MATCH使用方法

    Sheet1           A       B     C          D          E 1    得意先コード入力     納品先候補:   納品先コード    納品先名 2    1001                         1           あああ 3                                2           いいい 4                                3           ううう 5                                4           えええ 6                                5           おおお 7                                1           かかか Sheet2     A          B          C 1   得意先コード   納品先コード   納品先名 2   1001        1          あああ 3   1001        2          いいい 4   1001        3          ううう 5   1001        4          えええ 6   1001        5          おおお 7   1002        1          かかか 8   1002        2          ききき 9   1002        3          くくく 10  1002        4          けけけ お世話になります。 Sheet1で得意先コードをA2に入力すれば、Sheet2から納品先候補を検索して表示するようにしたいのですが、現状ではSheet1のD2以下に下記のような関数を入れています。 D2:=INDEX(Sheet2!$B$2:$B$10,MATCH(Sheet1!$A$2,Sheet2!$A$2:$A$10,0)) D3:=INDEX(Sheet2!$B$2:$B$10,(MATCH(Sheet1!$A$2,Sheet2!$A$2:$A$10,0)+1)) 以下同様、E列も同じです。 これでも表示はされるのですが、ドラッグコピーが出来ない(+1,2…)ので手入力になるのとエラーや0を非表示にする為にさらにISERRORを組み込む事を考えますとかなりしんどい事になりそうですので、もっと良いやり方はないでしょうか。 さらに、入力した得意先コードの分のみの納品先候補表示が出来ればありがたいです。 宜しくお願い致します。

  • エクセル2007 VBA シート1に入力されている項目をシート2の中で

    エクセル2007 VBA シート1に入力されている項目をシート2の中で検索し、新規シートにコピーする方法についてです。 例) シート1 A        B  C 取引先名 品目C 数量 A      1-1 25 B      あ12  5 C      T-8 10 :       :    : シート2 A       B    C      D    E 得意先C 取引先名 製品名  品目C  数量 001    (株)B    ケーブル あ12  10 002    (株)A    箱     1-1  20 002    (株)A    箱     1-1   7 002    (株)A    箱     1-1   5 :       :     :      :     : 上記の状態で、シート1の項目をシート2から検索します。 ・取引先名は一部分でも一致するあいまい検索で、品目Cは完全一致で検索したいです。 ・シート2には検索項目のデータが複数あるのですが、結果が一致する行を選択し新規シートにコピーペーストしたいです。 出来れば下記の処理も実行したいです。 *シート1の数量を、シート2の1行目から順に検索したデータから計算して、シート1の数量に満たした分だけをコピーペーストしたいです。  シート1の数量に満たさない場合も取り敢えずシート2にある分のデータをコピーペーストして、処理が終わったら不足している項目データに印をつける。  取引先Aの場合→数量が20個と7個の行をコピーペーストする感じです。 グーグルで調べたのですが、調べ方が悪いのか最初から躓いてしまいました。 今回はコードを記入していなくてすみません。 サンプルコードありで教えていただけるととても助かります。よろしくお願いします。

  • VBAのコード

    VBA初心者です。 "元データ"シートのA1をコピーし、cドライブにある、"保存用"というフォルダの、"一覧"というBOOKの"保存先"というシートのA1に貼り付ける時のコードがわかりません。 貼り付け先のシートを指定する記述がどうしてもわからないので助けてください。 よろしくお願いします。

  • エクセルVBAで

    1シート1得意先で得意先別に売上を管理するエクセルシートがあり、一枚目には得意先全体の売上を合計しているシートがあります。得意先別のシート名は得意先コードと得意先名になっており、期を更新する際に、得意先数分のシートを手動でグループ化させてから期を更新するマクロを実行するようにしていますが、これをVBAで自動処理させたいのです。 ただ、実際には得意先欄開始というシートと得意先欄終了というシートの間に得意先別のシートがあり、得意先数は増えたり減ったりもしますので、シート名でグループ化を指示することが出来ません。得意先欄開始~得意先欄終了までの間のシートすべてをグループ化させるようにしたいのです。 可能でしょうか?

  • エクセル関数教えてください。

    sheet1のセルAは得意先CD、セルBは得意先名。 Sheet2のセルAは空白、セルBは得意先名。 sheet2のセルAの空白にsheet1の得意先CDを入れたい。 sheet2のセルAに入る関数を教えてください。 shrrt1 A  B 得意先CD 得意先名 11 アイ 12 アマ 13 (株)ベスト 14 (株)ベスト営業所 sheet2 A      B 得意先CD 得意先名 アイ アマ (株)ベスト      (株)ベスト営業所

  • EXCELで3つのシートのデータを統合したい

    2つの会社(A社,B社)が合併し、それぞれ別の基幹システム(旧システム)を使っていた為、 新たに全く別の基幹システム(新システム)を作成中なのですが、 A社、B社共通の取引先もあれば、それぞれ独自の取引先もあり、 取引先のデータを新システムに移行させる為、エクセルで一覧を作成中です。 1つのエクセルファイルに以下のような3つシートがあります。 シート(1) A社得意先コード 取引先名 郵便番号 住所         取引条件 ・・・・ 000001      (株)○○○ 111-1111 ○○県○○市・・・ 20日締め ・・・ 000002      (株)▲▲▲ ・・・・ シート(2) B社得意先コード  取引先名 郵便番号 住所         取引条件 ・・・・ 000001-00     (株)○○○ 111-1111 ○○県○○市・・・ 20日締め ・・・ 000002-00     (株)□□□ ・・・・ シート(3) A社得意先コード B社得意先コード 新システム得意先コード 000001      000001-00    000001-000 000002                 000002-000            000002-00    000003-000 シート(1)(2)のデータをシート(3)のコード対比表を基にシート(3)にくっつけたいのです。 A社得意先コード B社得意先コード 新システム得意先コード (1)取引先名 (1)郵便番号 (1)住所 (1)取引条件 ・・・・ (2)取引先名 (2)郵便番号 (2)住所 (2)取引条件 ・・・・ 000001      000001-00    000001-000 (株)○○○ 111-1111 ○○県○○市・・・ 20日締め ・・・ (株)○○○ 111-1111 ○○県○○市・・・ 20日締め ・・・ (ここ見づらくてすいません) シート(3)に統合より新たにシートを作成した方がやりやすければそれでもかまいません。 シート(1)(2)にそれぞれ約6000行、80項目くらいあり、VLOOKUPでちまちまやるのは作業ミスを起こしそうであまりやりたくありません。 EXCEL2007を使用しております。 何かいい方法がありましたらご教示願います。

  • Excel VBA コピー行を新しいシートへ移行

    こんばんわ。 取り急ぎ教えて下さい。 Excel2007を使用しています。 シートに得意先商品名一覧があります。 得意先毎にシートわけし、シート名には得意先名としたいのですが 得意先数が多い為VBAを使用したいと考えています。 ご教授願えないでしょうか? 得意先数は都度変わります。 例>シート名:得意先一覧 A列(得意先名)     B列(商品名)  C列(単価) 得意先A         商品A      10円 得意先A         商品B      10円 得意先A         商品C      10円 得意先A         商品D      10円 得意先B         商品A      10円 得意先B         商品B      10円 得意先B         商品C      10円 得意先B         商品D      10円 得意先B         商品E      10円 得意先B         商品F      10円 得意先C         商品A      10円 得意先C         商品B      10円 ↓ ↓ ↓ シート名:得意先A 得意先A         商品A      10円 得意先A         商品B      10円 得意先A         商品C      10円 得意先A         商品D      10円 シート名:得意先B 得意先B         商品A      10円 得意先B         商品B      10円 得意先B         商品C      10円 得意先B         商品D      10円 得意先B         商品E      10円 得意先B         商品F      10円 シート名:得意先C 得意先C         商品A      10円 得意先C         商品B      10円 よろしくお願いします。

  • VBA列を行に入れ替える方法

    エクセル2010を使用してるのですが シート1の13列ずつ飛び飛びのセルをコピーして 1......2.....3.....4......5......6.....7.....8.....9....10 シート2のA1からA10に貼り付けする 1 2 3 4 5 6 7 8 9 10 For nextのコードで記述するにはどういう方法がありますでしょうか? よろしくお願いいたします。

  • エクセルの計算結果が急に出なくなった

    エクセルで請求書を作成しています。 同じブックのシート1のA列に得意先名、D列からJ列に納品日、K列に請求金額を入れています。A列には名前の定義で「得意先」と指定しています。 シート2のB6欄に得意先名が出るように入力規則をリストにして「=得意先」として、順にB6に得意先名をプルダウンできるようにしています。E17に=VLOOKUP(B6,シート1!A:K,4,0)とし、I17まで納品日が出るように指定しています。J17には=VLOOKUP(B6,シート1!A:K,11,0)とし請求金額が出るようにして、これまで順調に発行できてきました。 ところが、何かをいじったのか突然シート2のB6をプルダウンして変化させても数字が変わらなくなりました。どうすればいいでしょうか?

  • CSVファイルからEXCELへのインポート

    下記の項目のCSVファイルをEXCELにインポートしようと思っております。 得意先コード、得意先名(漢字)、商品コード、商品名、売上数量、売上金額 このCSVファイルをEXCELにインポートする際、得意先ごとに別のシートにしたい(シート名は得意先名としたい)場合どのようにすればよいのか、アドバイスいただければと思っております。 宜しくお願い致します。

専門家に質問してみよう