こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

シート1にB2から順に1名ずつ名前が入力されています。
シート2のB2にシート1のB2にある名前を反映させ、
シート3のB2にシート1のB3にある名前を反映させ、
シート4のB2にシート1のB4にある名前を反映させ、
というのを順に続けていきたいのですが、何か良い方法はありますでしょうか?

ちなみにあわよくばシート名も各シートのB2セルの名前にしてしまいたいです。
うまい方法が思いつかず、今のところ手打ちでおこなっているのですが、「手打ちならエクセルでなくてもよくない?」と悶々としております。

投稿日時 - 2017-01-06 16:37:33

QNo.9277705

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.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に 木下
となる。

投稿日時 - 2017-01-18 20:26:46

ANo.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
の、格納アドレスに出来たら
と、書いてみました

まぁ、駄目みたいですけど

此が、出来る… なら
各変数間の、リレーショナル性の定義が
出来るので
私的には、面白い
の、ですが

リレーショナルに、繋がれた
他の、変数まで
非明示的に、
値が、変わりそう…
なので
逆に、管理が大変そう
かも?

投稿日時 - 2017-01-07 05:19:31

ANo.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

投稿日時 - 2017-01-06 19:28:43

ANo.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

投稿日時 - 2017-01-06 19:22:31

お礼

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

投稿日時 - 2017-01-06 19:59:53

ANo.3

=(イコールの記号)を入力後
希望シートの希望セルをクリックし
エンターキーを押して確定させてください

関数等
要りませんよ

まあ、どうしても
と、仰るなら
OFFSET 関数、又はINDEX関数、
ですかね
他シートを
キー無しに参照可能な物は
限定されますから

INDIRECTは、出来たかな?

投稿日時 - 2017-01-06 17:49:08

お礼

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

投稿日時 - 2017-01-06 19:58:22

ANo.2

「関数」とはセル関数の事と理解しましたが良いですか?
以下の方法は、Excel2013以降でのみ有効です。
※質問の際にはExcelのバージョンも書きましょう

まず、ブックを一度保存してください(未保存のブックでは駄目です)。
Sheet2以降のシートのB2セルに以下の式を入れます。

=INDEX(Sheet1!B:B,SHEET(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))))

シート名を変更するのはセル関数では無理です。

投稿日時 - 2017-01-06 17:42:07

お礼

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

投稿日時 - 2017-01-06 19:56:18

ANo.1

INDIRECT関数

投稿日時 - 2017-01-06 17:16:48

お礼

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

投稿日時 - 2017-01-06 19:56:57

あなたにオススメの質問