[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロにてINDEX関数を使って条件の通りに作成したい』(ウルトラ)
Webサイトのそのままの引用ですが、下の1.〜9.の条件ならばどのように設定したらよいのか、お教え下さいませんか。
Sub Index関数の使い方() Dim 名前 As Variant 名前 = WorksheetFunction.Index(Range("B5:C9"), 3, 2) Range("C11").Value = 名前 End Sub
1.関数でINDEXを使ってやろうとしたのですが、1列が25列(行)のため、横の次の列への設定がうまく関数で出来なかったので、マクロを使ってできないか相談した次第です。
2.Excelのデーターがsheet1のセルのA1〜A300まである。
3.A0001・A2001・A3025とかというような受付番号がランダムにある。
4.2.に示したデーターをsheet2の座席表に表記させたい。
5.その時にセルを一つおきに入れたい。
6.A0001・A2001・A3025の番号の共通のAは外して0001・2001・3025のように入れたい。
7.縦(行)に25列・横(列)に13列で作成してある。
8.縦(行)はセルを1行ずつ開け、横(列)はセルを2列ずつ開けて番号を入れる。
9.sheet2は始まりがH14セルから始める。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
「仮に」A1からA300まで、規則正しく1,2,3・・・と入っていたとして、
Sheet2のどこのセルに書き込むのですか。
1,2,3・・・を使って説明してください。
300個全て書く必要はもちろんありません。
最初の10個だけで結構です。
(γ) 2017/03/18(土) 08:40
念のため申し上げると、文章表現ではなく、 H I J K ・・・ 14 15 16 17 といったシートレイアウト表示で書き込んで下さい。 (γ) 2017/03/18(土) 08:45
おはようございます。
ご提示の説明だけでは、Sheet1とSheet2の構成は何となく分かりますが、どの順番で転記するのかが全く分かりません。 Sheet1のデータをシート2にはどのような順番で転記したいんですか? 誰が見ても一目で分かるように、レイアウトを添えるように心掛けて下さい。
Sheet2のH14から横に転記して、13列目(T列?)まで行ったら下に移るんですか? それとも下に転記して、25行目(38行?)まで行ったら、横に移るんですか?
>5.その時にセルを一つおきに入れたい。 >8.縦(行)はセルを1行ずつ開け、横(列)はセルを2列ずつ開けて番号を入れる。 この2つは同じ事を指してるんですか?
>6.A0001・A2001・A3025の番号の共通のAは外して0001・2001・3025のように入れたい。 アルファベットはAだけですか? Aと言う文字を消すだけで良いんですか? それともとにかく右から4桁の数字だけを取り出したい?
(sy) 2017/03/18(土) 08:51
Sheet2のH14から横に転記して、13列目(T列?)まで行ったら下に移るんですか? それとも下に転記して、25行目(38行?)まで行ったら、横に移るんですか?
25行目まで行ったら、横に移ります。
>5.その時にセルを一つおきに入れたい。 >8.縦(行)はセルを1行ずつ開け、横(列)はセルを2列ずつ開けて番号を入れる。 この2つは同じ事を指してるんですか?
縦は1行ですが、横は2列だったので、重複の表現になりました。すみません。
>6.A0001・A2001・A3025の番号の共通のAは外して0001・2001・3025のように入れたい。 アルファベットはAだけですか? Aと言う文字を消すだけで良いんですか? それともとにかく右から4桁の数字だけを取り出したい?
Aと言う文字を消すだけです
右から5桁でした。02001・03025・00001というような取り出し方です。質問の時の番号が4桁でしたが、正確には5けたでした。
なお、番号は途中で飛んだりして、ある程度一定の順番ですが、ランダムと言った方がよいかもしれません。
(γ)さんへの回答 2017/03/18(土) 08:45
アルファベットはAだけですか?
Aだけです。
といったシートレイアウト表示で書き込んで下さい。
このようなことです。
HI J KL M NO P ・・・
14 00001 00034 02010 03025 15 00007 00036 02015 03055 16 00018 00045 02024 04023 17 00019 00689 03011 10025
(ウルトラ) 2017/03/18(土) 10:19
(γ) 2017/03/18(土) 10:41
順番にシャッフルするということではなくて、sheet1のセルのA1〜のデータをsheet2のセルH14〜に入れたいということです。
HI列ってどこですか?
14行目、15行目、16行目、17行目と連続して書き込むのですか?
話が一貫していないように思うけど。
# レイアウトを示すのが面倒で、いやなんですか?
「レイアウトを示すのが面倒で、いやなんですか?」
決してそんなことはありません失礼しました。下記のように訂正しました。
なお、H14〜というのは、前の列と前の行は文言などを入れたレイアウトになっていますので、すみません、H列の14行からということになっています。これも説明不足でした、申し訳ありません。
sheet1のデーターが
A 1 A00001 2 A00007 3 A00018 4 A00019 5 A00023 ・ ・ ・ ・ ・ 25 A00030 26 A00034 27 A00036 28 A00045 ・ ・ 300
sheet2が下記のようにしたいのですが
HI J KL M NO P ・・・
14 00001 00034 02010 03025 15 16 00007 00036 02015 03055 17 18 00018 00045 02024 04023 19 20 00019 00689 03011 10025
(ウルトラ) 2017/03/18(土) 11:18
H I J K L (以下略) 14 1 26 15 16 2 27 17 18 3 28 19 ・・・ 62 25 50 (以下略)
ということですか? 数値は A1から順に1,2,3であったとした場合のもの。
たぶんこんなことでしょうか? Sub test() Dim k As Long, r As Long, c As Long
For k = 1 To 300 r = ((k - 1) Mod 25) * 2 + 14 c = WorksheetFunction.Floor((k - 1) / 25, 1) * 3 + 8 Sheet2.Cells(r, c).Value = Right(Sheet1.Cells(k, 1).Value, 5) Next End Sub
想像はつくが、syさんからもレイアウト要望があるように、 質問としてきちんとしたものを提示するようにしてください。
上記が間違っていたら、そちらで必要な修正をしてください。 これで失礼します。
(γ) 2017/03/18(土) 11:26
>関数でINDEXを使ってやろうとしたのですが、1列が25列(行)のため、 >横の次の列への設定がうまく関数で出来なかったので、
H14 =RIGHT(INDEX(Sheet1!$A:$A,ROUNDUP(ROW(A1)/2,0)+ROUNDUP((COLUMN(A1)-1)/2,0)*25),5)
H14とH15(H15は空白)を選択して、H62までフィルコピー
H14:I62(I列は空白)を選択して、右へフィルコピー
こんな感じでできませんか?
参考まで。 (笑) 2017/03/18(土) 12:03
横2列空ける? H列の次はK列?
だったら
H14 =RIGHT(INDEX(Sheet1!$A:$A,ROUNDUP(ROW(A1)/2,0)+ROUNDUP((COLUMN(A1)-1)/3,0)*25),5) ~~~ H14:H15を選択して、62行目までフィルコピー H14:J62を選択して、右にフィルコピー
参考まで。 (笑) 2017/03/18(土) 12:24
マクロなら普通にループですれば良いのに、マクロでIndexを使う前提で質問する意味が分かりません。 test1の方が分かりやすいと思います。 test2はγさんと同じアプローチです。
Sub test1() Dim i As Long Dim k As Integer Dim m As Long
For k = 8 To 44 Step 3 For i = 14 To 62 Step 2 m = m + 1 Sheets("Sheet2").Cells(i, k).Value = Right(Sheets("Sheet1").Cells(m, "A").Value, 5) Next i Next k
End Sub
Sub test2() Dim i As Long
For i = 1 To 300 Sheets("Sheet2").Cells(((i - 1) Mod 25) * 2 + 14, Int((i - 1) / 25) * 3 + 8).Value _ = Right(Sheets("Sheet1").Cells(i, "A").Value, 5) Next i
End Sub
関数ならこんなので、
H14 =RIGHT(INDEX(Sheet1!$A:$A,(ROW(A1)+1)/2+INT(COLUMN(A1)/3)*25),5) H14:J15まで選択して、下右にフィルコピー
(sy) 2017/03/18(土) 12:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.