- 締切済み
EXCEL:何の関数を使えば良いか教えてください
シート1にB2から順に1名ずつ名前が入力されています。 シート2のB2にシート1のB2にある名前を反映させ、 シート3のB2にシート1のB3にある名前を反映させ、 シート4のB2にシート1のB4にある名前を反映させ、 というのを順に続けていきたいのですが、何か良い方法はありますでしょうか? ちなみにあわよくばシート名も各シートのB2セルの名前にしてしまいたいです。 うまい方法が思いつかず、今のところ手打ちでおこなっているのですが、「手打ちならエクセルでなくてもよくない?」と悶々としております。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
質問者が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)
多分… エクセルでは 恐らくは、 使えない技が、含まれている の、ですが お邪魔します。 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 の、格納アドレスに出来たら と、書いてみました まぁ、駄目みたいですけど 此が、出来る… なら 各変数間の、リレーショナル性の定義が 出来るので 私的には、面白い の、ですが リレーショナルに、繋がれた 他の、変数まで 非明示的に、 値が、変わりそう… なので 逆に、管理が大変そう かも?
- tsubu-yuki
- ベストアンサー率46% (179/386)
> 何か良い方法はありますでしょうか? > シート名も各シートの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)
時間はかかるが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
- Nouble
- ベストアンサー率18% (330/1783)
=(イコールの記号)を入力後 希望シートの希望セルをクリックし エンターキーを押して確定させてください 関数等 要りませんよ まあ、どうしても と、仰るなら OFFSET 関数、又はINDEX関数、 ですかね 他シートを キー無しに参照可能な物は 限定されますから INDIRECTは、出来たかな?
お礼
早速のご回答ありがとうございます!! 前の方への御礼でも述べましたが、自分、あまり関数詳しくありませんでした!!初見のものがたくさんあるので、これを機に一通りチャレンジしてみたいと思っております。どうもありがとうございます~!!
- mt2015
- ベストアンサー率49% (258/524)
「関数」とはセル関数の事と理解しましたが良いですか? 以下の方法は、Excel2013以降でのみ有効です。 ※質問の際にはExcelのバージョンも書きましょう まず、ブックを一度保存してください(未保存のブックでは駄目です)。 Sheet2以降のシートのB2セルに以下の式を入れます。 =INDEX(Sheet1!B:B,SHEET(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1))))) シート名を変更するのはセル関数では無理です。
お礼
早速のご回答をありがとうございます。 すみません、バージョンまで思い当たらずご配慮いただきありがとうございます。調べてみたところ、EXCEL2013でした。 自分が自力で分かるのはSUMとDATEとIFくらいのものなので、たぶんセル関数のことで合っているのではないかと思われます…。 画像もありがとうございます!そうです、こんなかんじにしたかったんです!!すごくわかりやすくて助かります。早速実践してみます!!
- aokii
- ベストアンサー率23% (5210/22062)
INDIRECT関数
お礼
早速のご回答ありがとうございます! はじめて目にする関数です!調べてみます!!
お礼
早速のご回答ありがとうございます! 滅法むずかしそうなものがきましたね…ウワサでしか聞いたことが無いマクロというものですね…。折角なので調べてみたいと思います。 こ、これができるようになったらEXCEL一人前なのでしょうか…道は遠そうですが、がんばります!!