• 締切済み

EXCEL:何の関数を使えば良いか教えてください

シート1にB2から順に1名ずつ名前が入力されています。 シート2のB2にシート1のB2にある名前を反映させ、 シート3のB2にシート1のB3にある名前を反映させ、 シート4のB2にシート1のB4にある名前を反映させ、 というのを順に続けていきたいのですが、何か良い方法はありますでしょうか? ちなみにあわよくばシート名も各シートのB2セルの名前にしてしまいたいです。 うまい方法が思いつかず、今のところ手打ちでおこなっているのですが、「手打ちならエクセルでなくてもよくない?」と悶々としております。

みんなの回答

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

質問者がVBAどころではないようなので、回答は無駄だと思うが、参考になる人もいるかと思って。 VBAで書くのが文字数で、一番短いと思う。実質3行。 データ例 Sheet1 B2:B 山田 西澤 木島 大野 木下 ーー Sheet1からSheet6があるものとする。 ーーー 標準モジュールに Sub test02() MsgBox "シート数" & Sheets.Count - 1 '--- For i = 2 To Sheets.Count Worksheets(i).Range("B2") = Worksheets("Sheet1").Range("b" & i) Next i '-- End Sub を入れて実行すると Sheet2 B2に 山田 Sheet3 B2に 西澤 Sheet4 B2に 木島 Sheet5 B2に 大野 Sheet6 B2に 木下 となる。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.6

多分… エクセルでは 恐らくは、 使えない技が、含まれている の、ですが お邪魔します。 Option Explicit Option Base 0 CONST 名簿シート名 As String = "メンバー名簿" MAIN()  CALL TEST-SUB() END Sub TESU-SUB()  DIM メンバー数 As Long, シート() As Worksheet  DIM シートカウント As Worksheet, レンゲ As Range, メンバー名 As Variant,  メンバー数 = 0  For Each シートカウント In Worksheets   IF "シート1" = シートカウント.NAME _   Then    Set レンゲ = シートカウント.Renge("B2").End(xlDown)    ReDim Preserve シート(メンバー数)    Set シート(0) = シートカウント    シート(0).Name = 名簿シート名   ELSE    メンバー数 = メンバー数 + 1    ReDim Preserve シート(メンバー数)    Set シート(メンバー数) = シートカウント    メンバー名 = レンゲ.Range("B2").OFFSET(メンバー数,0).*Value    シート(メンバー数).Name = メンバー名    シート(メンバー数).Range("B2").value = メンバー名   ENDIF  Next シートカウント EndSub 判る方には ニュアンスは、伝わる と、思います (※注:間違えてたら、お手柔らかに) ところで、    メンバー名 = レンゲ.Range("B2").OFFSET(メンバー数,0).*Value    シート(メンバー数).Name = メンバー名    シート(メンバー数).Range("B2").value = メンバー名 此等により シート(メンバー数).Nameと、 シート(メンバー数).Range("B2").valueが参照する 値の実態を レンゲ.Range("B2").OFFSET(メンバー数,0).*Value の、格納アドレスに出来たら と、書いてみました まぁ、駄目みたいですけど 此が、出来る… なら 各変数間の、リレーショナル性の定義が 出来るので 私的には、面白い の、ですが リレーショナルに、繋がれた 他の、変数まで 非明示的に、 値が、変わりそう… なので 逆に、管理が大変そう かも?

回答No.5

> 何か良い方法はありますでしょうか? > シート名も各シートのB2セルの名前にしてしまいたい どちらも叶えたいならマクロかなぁ。 一例として Sub Sample() Dim mySH As Worksheet Dim myTxt As String     Set mySH = ActiveSheet     For i = 2 To mySH.Cells(Rows.Count, 2).End(xlUp).Row         myTxt = mySH.Cells(i, 2).Value         With Worksheets.Add(after:=Worksheets(Worksheets.Count))             .Name = myTxt             .Cells(2, 2).Value = myTxt         End With     Next End Sub

  • h_s1992
  • ベストアンサー率25% (21/84)
回答No.4

時間はかかるがFreeMacro!やUWSCでマウスキーボード操作を自動化すれば簡単。 もう一つの方法は、シート1をcsv化し、テキストファイルを書き出せるスクリプト言語で シート1.csvのB2以降の名前を抽出し、B2の名前.csv、B3の名前.csv、B4の名前.csv・・・と 書き出すスクリプトを作成する。 ちなみに書きだしたD2の名前.csvの中は , ,D2の名前 になる。シート1.csvと人数分のcsvのシートを結合してできあがり。 https://okwave.jp/qa/q3240602.html

fransis
質問者

お礼

早速のご回答ありがとうございます! 滅法むずかしそうなものがきましたね…ウワサでしか聞いたことが無いマクロというものですね…。折角なので調べてみたいと思います。 こ、これができるようになったらEXCEL一人前なのでしょうか…道は遠そうですが、がんばります!!

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.3

=(イコールの記号)を入力後 希望シートの希望セルをクリックし エンターキーを押して確定させてください 関数等 要りませんよ まあ、どうしても と、仰るなら OFFSET 関数、又はINDEX関数、 ですかね 他シートを キー無しに参照可能な物は 限定されますから INDIRECTは、出来たかな?

fransis
質問者

お礼

早速のご回答ありがとうございます!! 前の方への御礼でも述べましたが、自分、あまり関数詳しくありませんでした!!初見のものがたくさんあるので、これを機に一通りチャレンジしてみたいと思っております。どうもありがとうございます~!!

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

「関数」とはセル関数の事と理解しましたが良いですか? 以下の方法は、Excel2013以降でのみ有効です。 ※質問の際にはExcelのバージョンも書きましょう まず、ブックを一度保存してください(未保存のブックでは駄目です)。 Sheet2以降のシートのB2セルに以下の式を入れます。 =INDEX(Sheet1!B:B,SHEET(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1))))) シート名を変更するのはセル関数では無理です。

fransis
質問者

お礼

早速のご回答をありがとうございます。 すみません、バージョンまで思い当たらずご配慮いただきありがとうございます。調べてみたところ、EXCEL2013でした。 自分が自力で分かるのはSUMとDATEとIFくらいのものなので、たぶんセル関数のことで合っているのではないかと思われます…。 画像もありがとうございます!そうです、こんなかんじにしたかったんです!!すごくわかりやすくて助かります。早速実践してみます!!

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

INDIRECT関数

fransis
質問者

お礼

早速のご回答ありがとうございます! はじめて目にする関数です!調べてみます!!