• ベストアンサー

エクセルでsheet2のデータ更新容易化のための処理

エクセルで次のことがしたいのですが、 (前提)sheet1のセルc6~C15のタテに“c6”~“c15”という名前が入っています。 またsheet2のセルB4~K4に、今度は横に“c6”~“c15”という名前が入っています。 Sheet1にコマンドボタンAを設けます。 (動作) (1)sheet1のコマンドボタンAが押されたら、そのときカーソルがc6~C15のどこかにあったとして 仮にc14のところにあった場合,sheet2のJ列のJ4セル――“c14”の表示されているセルにジャンプし (2)かつJ列から左右の領域(B列~I列)は非表示にしてA列とその列のみシートの左側に表示する。 (3)またsheet2のA1セル近辺にコマンドボタンBがあって、sheet2のデータを全表示にする。 つまりsheet2のA列は常に表示です。 (設問の意味) ある店(“c6”~“c15”という名前)に登録されている人についての変更履歴を、操作しやすく変更入力管理を容易くするため。sheet2のセルB4~K4の下にその登録されている人のデータがあるという意味です。 (お願い) (1),(2),(3)のどこでもいいのでマクロ等で実現することについてお知恵拝借します。よろしくお願いします。

  • taktta
  • お礼率72% (1031/1430)

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

  • ベストアンサー
回答No.2

以下のVBAをモジュールへ追加して sheet1のコマンドボタンAにSheet1マクロ sheet2のコマンドボタンBにSheet2マクロ を登録して下さい。 Sub Sheet1マクロ() Dim objSh1 As Worksheet Dim strSh1 As String Dim objSh2 As Worksheet Dim objRg2 As Range Set objSh1 = Worksheets("Sheet1") Set objSh2 = Worksheets("Sheet2") objSh1.Select strSh1 = Selection For Each objRg2 In Worksheets("Sheet2").Range("B4:K4") If strSh1 <> objRg2.Text Then objSh2.Select objRg2.EntireColumn.Hidden = True End If Next End Sub Sub Sheet2マクロ() Range("B4:K4").Select Selection.EntireColumn.Hidden = False Range("A4").Select Worksheets("Sheet1").Select End Sub こんな感じてどうでしょうか。 (複数のセル選択は出来ません。)

taktta
質問者

お礼

表現が簡潔でとても気に入りました。おかげで解決して、とてもうれしいです。どうもありがとうございました。

その他の回答 (3)

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.4

こんにちは。セル位置が固定なら、文字列で判断ではなく、単純に列指定できそうですね。 それに、 >左右の領域(B列~I列)は非表示にしてA列とその列のみシートの左側に表示 …『左右』という事は、もしかして~IV列という事でしょうか? '--------------------------------------------------------------------- Sub ボタンA用()   Dim n As Long   If Intersect(ActiveCell, Range("c6:c15")) Is Nothing Then Exit Sub   n = ActiveCell.Row - 4   With Sheets("sheet2")     Application.Goto .Cells(4, n)     .Columns("B:IV").Hidden = True     .Columns(n).Hidden = False   End With End Sub '--------------------------------------------------------------------- Sub ボタンB用()   Columns("B:IV").Hidden = False End Sub '---------------------------------------------------------------------

taktta
質問者

お礼

これからじっくりと理解するつもりですがとりあえずお礼します。 どうもありがとうございます。

  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんばんは。   コマンドボタンはコントロールツールボックスのCommandButtonを配置 (Sheet1のCommandButtonclickイベント) -------------------------------------------- Private Sub CommandButton1_Click()  Dim myCell As Range  Set myCell = Sheets("Sheet2").Range("B4:K4").Find(what:=ActiveCell)  If Not myCell Is Nothing Then    With Sheets("Sheet2")      .Select      .Range(.Range("B4"), myCell.Offset(, -1)).EntireColumn.Hidden = True    End With  Else    MsgBox ActiveCell.Value & " はSheet2にありません"  End If End Sub ---------------------------------------------- (Sheet2のCommandButtonClickイベント) ----------------------------------------------- Private Sub CommandButton1_Click()   Cells.EntireColumn.Hidden = False End Sub ---------------------------------------------- 以上です。  

taktta
質問者

お礼

NO2の人のを利用したらうまくいきました。taocatさんご回答どうもありがとうございました。

  • miyuyu
  • ベストアンサー率61% (30/49)
回答No.1

マクロでしたいことを記録して、不足している部分を後から補うと楽です。 (3)に関しては下記を応用という事で Sub Macro1() Dim strVal As String Dim ActCol As Integer Dim i As Integer strVal = ActiveCell.Value Sheets("Sheet2").Select Rows("4:4").Select Rows.Find(strVal).Activate ActCol = ActiveCell.Column For i = 2 To 11 If i <> ActCol Then Columns(i).EntireColumn.Hidden = True Next i Cells(4, ActCol).Select End Sub

taktta
質問者

お礼

(3)はこれで解決しそうです。どうもありがとうございました

関連するQ&A

  • Excelでシート間のデータの抽出方法

    1つのブックに集計用のシートと、A店、B店、C店という各店舗別の売上シートがあります。 Sheet集計用のA1にA店のコード(A店は001、B店は002というようなコード)を入れると、Sheet集計用のB列の上期売上、C列の下期売上にSheetA店のB列の上期売上、C列の下期売上のデータが入るようにすることは可能でしょうか? Sheet集計用のA1のコード変更することによってデータを引っ張ってくるシートが変わる様にしたいということなんですが、Excelでどのようにすればいいかわかりません。 各店舗のシートのA1のセルにも、その店舗のコードが入力されています。

  • EXCEL で検索、更新したい

    EXCEL でわからない箇所があり質問します。 前提条件 Sheet1 A列:名前 B列:年月 C列:値 データは、名前と年月で一意になるデータシートがあり マスターデータとして全データが登録されている Sheet2 A列:名前 B列:年月 C列:値 ある条件でとあるデータベースから抽出した名前と年月の一覧がある この段階で値のセルには何も入っていない やりたい事 (1)この状態でマクロを実行し、A列、B列を条件に該当する行から    C列を抽出しSheet2 にセット (2)Sheet2のC列の値を変更後、マクロの実行で    A列、B列の条件を元該当する行から、Sheet1の C列に値を更新 (3)もし、Sheet2のA列、B列の条件に該当しない行がある場合、    Sheet1に行追加しC列を格納 という事をしたいと考えています。 Sheet1 の全ての行をマクロでループさせて A列、B列をif分で比較し行を取得し、Sheet2 に張る場合、 遅くなるのであまりやりたくないと思っています Find 関数も考えたのですが、ヘルプを見る限り、条件が1つしか指定でき ないように思えるのですが、複数列の条件を指定できる Find 関数 あるいは、類似の関数とあかがあるのなら教えてください 最悪は、EXCEL ADO で、自分自身をSQLで抽出、Update、Insert を行う 事も考えていますが、 EXCELのセル内の式で、INDEX関数やDGET関数で簡単に抽出できるのに (ただ、値を変更するので式はかけないけど・・・) わざわざ、ADOでプログラムを組むのもどうなんだろうと疑問に思ってます。

  • 他シートからのデータ抽出について

    以下の状況について、ご教示いただければ助かります。 【状況】 シートA K列にキーとなる項目があります。(K5セルからK100セルにデータが記入してあります) AG列に「手数料」項目を表示させる列があります。(AG5セルからAG100セルにデータが表示されます) シートB M列にキーとなる項目があります。 AA列に「手数料(1)」項目があります。(AA13セルからAA200セルにデータが入ります) AH列に「手数料(2)」項目があります。(AH13セルからAH200セルにデータが入ります)  AA列にデータがある行は、AH列にはデータは入りません。  AH列にデータがある行は、AA列にはデータは入りません。 【実現したいこと】 シートAのL列にシートBのAA列かAH列の記入されている手数料データを表示させたい。  シートBのAA列にデータがある場合はAA列のデータを表示させる。  シートBのAH列にデータがある場合はAH列のデータを表示させる。 これは、vlookupで対応する事を想定しているのですが、実現できるのでしょうか。 何卒、よろしくお願いいたします。

  • エクセル 複数シートのデータを一つにまとめる

    エクセルに関してお知恵を拝借願えれば幸いです。 一つのファイルに多数の(30~96)シートが存在している エクセルデータがあります。 これらを加工しやすいようにしたいと考えております。 内容としては、 シート1~シート3までは、 同じA列に対し、違う内容が示されており(※1)、 (※1) シート1 A列    B列   C列・・・ 名前α  年齢  住所・・・ シート2 A列    B列   C列・・・ 名前α  血液型 趣味・・・ シート3 A列    B列   C列・・・ 名前α  特技  好物・・・ シート4以降は3シートずつ上記のA列が変わっていきます。(※2) (※2) シート4 A列    B列   C列・・・ 名前β  年齢  住所・・・ シート5 A列    B列   C列・・・ 名前β  血液型 趣味・・・ シート6 A列    B列   C列・・・ 名前β  特技  好物・・・ 作業としては二つあり、 作業1:3つのシートに分かれているデータを先頭のシートに一つにまとめる (シート1) A列    B列   C列   D列   E列   F列   G列 名前α  年齢  住所   血液型  趣味  特技  好物 (シート2) A列    B列   C列   D列   E列   F列   G列 名前β  年齢  住所   血液型  趣味  特技  好物 作業2:上記を一つのシートにまとめる (シート1) A列    B列   C列   D列   E列   F列   G列 名前α  年齢  住所   血液型  趣味  特技  好物 名前β  年齢  住所   血液型  趣味  特技  好物 A列の名前の数が違っていたりして、単純に作業記録のやり方のマクロでは うまくいかず、これらを可能とするマクロについてご助言願えれば幸いです。 よろしくお願い致します。

  • VBA,二つのExcelのsheetにデータ保存

    VBA初心者です。 皆様のお力をお貸し頂きたく質問させて頂きます。よろしくお願いいたします。 質問内容は、下記になります。 Excelのsheet1には、縦列A,B,C・・・とデータが入っております。 sheet1の例 A B C sheet2は、入力するsheetです。 今回はA列の3行目からとします。 問題は、sheet1の縦の列をA,B,C,Dとすればデータの更新は、出来るのですが sheet1のデータのA,B,C一つ飛んでEまた一つ飛んでGという感じでsheet1のデータを 飛ばしてsheet2に表示、更新(保存)をしたいと思います。 ですので、sheet2のA列の3行目からA,B,C,飛んでE飛んでGとsheet1からデータを 表示させ、さらにsheet2の入力値が変更されると、sheet1のデータが入っている A,B,C,E,Gに更新される仕様です。 sheet1(データが入っています) A , B , C , E , G , 値1 , 値2 , 値3   , 値4 , 値5 sheet2(入力する、入力したデータは、sheet1へ更新される) A列 3行目 、sheet1の値1(A列)が入ります。 4行目 、sheet1の値2(B列)が入ります。 5行目 、sheet1の値3(C列)が入ります。 6行目 、sheet1の値4(E列)が入ります。 7行目 、sheet1の値5(G列)が入ります。 以上です。申し訳ございませんが、ご教授よろしくお願いいたします。

  • excelでデータを別シートに引っ張ってきたい

    excelで値を検索し、返す時、返す値の横にあるデータを違うシートのセルの下に一緒に引っ張ってきたいときの関数(方法)を教えてください。 素人なので分かりにくいと思いますが、お知恵をお借りしたいと思います。 あるデータのシートの検索値を別シートに持ってきたいのですが、シート1をシート2のようにしたいのです。 /は空白 例)シート1 /A B C D E 1(1) □ ○ ▽ ◎ 2 (2) ▼ ■ ◇ ◎ シート2 / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 分かりにくいかもしれませんが、 シート1の(1)(A1)を検索すると、シート2(B1)に□(これはVLOOKで引っ張ってこれるのはわかります。) 次にシート1の(C1)○をシート2の(B2)へ持ってきたいのです。シート1(D1)(E1)はシート2の(C2)(D2)へ。 しかもシート1のC列は空白セルもあり、シート1のC列が空白の場合、下にずれることなくシート1の(D1)(E1)はシート2の(C1)(D1)へ。下記<図a>のようになるようにしたいのです。 そして、シート2のA列に検索値として入力する(1)や(2)の値は連番ではなく、(2)の次に(5)に飛んだりします。(2)の行のC列にデータがあっても、(5)のC列にデータはないこともあります。<図b> <図a> /A B C D 1 (1) □ ▽ ◎ 2 (2) ▼ ◇ ◎ <図b> / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 5 (5) □ ▽ ◎ 6 (7) ▼ ◇ ◎ vlookとかCLUMN関数とか考えてはみたのですが、どうもうまくいきません。 毎回作成するデータなのですが、毎回コピペで作成しています。 とても面倒なので(1)を検索したらデータが一瞬で検索できるようにしたいと試みてはみたものの、私の知識では不可能でした。 関数では無理なのでしょうか。。。 関数はあまり詳しくないので分かりやすい方法があれば、教えていただければ助かります。 関数に詳しい方、よろしくおねがいいいたします。 関数にはこだわっていません。違う方法があればそれも含めておねがいいたします。

  • Excel 別シートのセル参照

    Excel で、二つのシート間でセル参照したいのですが、シートに書き込んでおくコマンドの書き方を教えてください。 (操作) Sheet2 でA列のどこかのセルをダブルクリックしたとき、B列およびC列の該当行の値を、Sheet1 の二つの固定セルにそれぞれ表示させる。 よろしくお願いします。

  • Excel でシート間の重複データ(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 であるような行を知りたいのですが、 どうすればよいのでしょうか。

  • Excel シート間のデータの照合

    Excelで、シート間のお客様データ(だいたい各1万件)を照合します。下記は現在の照合方法ですが、これでは時間がかかるうえ手作業が多く発生しミスにつながります。頻繁に行う作業なので、関数でも、マクロでも、とにかくもう少し簡単にできる方法がありましたら、どうぞご教授ください。よろしくお願いします!! 【目的】 シート「sheet2008」には2008年度のデータ。シート「sheet2007」には「sheet2008」と同じ形式の2007年度のデータが入っています。シート「sheet2008」に、そのお客様の2007年度の担当営業マンを表示させたいのです。 【例】 列A(電話番号): 011-231-1112 列B(名前):佐藤 一郎 列C(住所):北海道札幌市中央区北1-1-1 列D(担当営業マン):鈴木 新規の列(2007年度の担当営業マン):鈴木  ・「sheet2008」「sheet2007」はほぼ同じデータですが、一部のお客様は名前が変わっていたり、住所が変わっていたりします。  ・「sheet2007」にないお客様が「sheet2008」にあったり、その逆があったりして、各シートのデータ件数は一致しません。  ・名前が同じでも住所が違うデータ、電話番号が同じでも担当営業マンが違うデータは別者として扱います。  ・「顧客ID」のような“必ずユニークな情報”は存在しません。 【現在の照合方法】 (1)「sheet2008」の各列の前に空白列を挿入する。  (データの1行目はタイトル行…B1:電話番号/D1:名前/F:住所/H:担当営業マン)  (データの2行目以降はデータ)     列A(空白行):     列B(空白行): 011-231-1112     列C(空白行):     列D(名前):佐藤 一郎     列E(空白行):     列F(住所):北海道札幌市中央区北1-1-1     列G(空白行):     列H(担当営業マン):鈴木 (2)「sheet2007」を列Aの電話番号で昇順に並べ替える。 (3)「sheet2008」の電話番号が「sheet2007」にあるかを調べる。     A2:「=IF(B2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,1,0)),"○","▲")」 (4)(3)で調べた「sheet2008」の電話番号と同じ行にある名前/住所が「sheet2007」にあるかを調べる。     C2:「=IF(D2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,2,0)),"○","▲")」     E2:「=IF(F2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,3,0)),"○","▲")」 (5)電話番号/名前/住所がすべて一致するデータについて、「sheet2007」にある担当営業マンの値を列Gに表示させる。     G2:「=IF((AND(A2="○",C2="○",E2="○"))=TRUE,(VLOOKUP($B2,Sheet2007!$A:$D,4,0)),"▲") (6)"▲"やエラー値で表示される計算結果について、目視で確認する。 (終了)

  • Excelで別のシートの内容を表示させたい

    Sheet1のA2からC50までの範囲にデータを出力し(どこのセルに入るかは可変)、 その内容に従ってSheet2の決まったセルに表示させたいのですが、どのような式にすれば良いか教えて下さい。 条件を言葉で書くと、 Sheet1のA列に001があれば、その行のC列の値をSheet2のJ8に表示する。 参考に、Sheet1のA列はコード名、B列は計算内容、C列は計算結果が別のデータベースから出力されます。 計算結果が0だと出力されず、出力したものは2行目(1行目はタイトル行)から詰めて入ります。 その結果、A2からC50までの範囲のどこに入るかわからないのです。 よろしくお願いします。

専門家に質問してみよう