『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

すみません。誰か教えて下さい。

下記の様な並べ替えが出来る関数を誰か知りませんか?

マンションA 101 107 201
マンションB 202 405
マンションC 102 203 301 501
マンションD 103 201 405



マンションA101
マンションA 107
マンションA 201
マンションB202
マンションB 405
マンションC102
マンションC 203
マンションC 301
マンションC 501
マンションD103
マンションD 201
マンションD 405

誰かご存知の方いましたら教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

参考です。


可変データの取り扱いはマクロ(VBA)が簡単です。
データをSheet1、並び替えをSheet2に行います。
(1)Sheet1タブ上で右クリック→コードの表示→以下のサンプルコードを貼り付け→F5キー押下
   マクロの削除は貼り付けたコードを全削除して下さい。

サンプルです。
Sub 並び替え()
Set st1 = Sheets("sheet1")
Set st2 = Sheets("sheet2")
For i = 1 To st1.Cells(Rows.Count, 1).End(xlUp).Row
For j = 2 To st1.Cells(i, Columns.Count).End(xlToLeft).Column
n = n + 1
st2.Cells(n, 1) = st1.Cells(i, 1)
st2.Cells(n, 2) = st1.Cells(i, j)
Next
Next
End Sub
    • good
    • 4
この回答へのお礼

マクロ・・・。

すごい!!

上記の方法で簡単に出来ました。

感動しました。

ありがとうございます。

お礼日時:2011/11/29 12:59

分かり易く計算に負担のかからない方法は作業列を作って対応することでしょう。


例えば元の表がシート1に有るとしてA1セルには項目名が、A2セルから下方にマンション名のデータが入力されているとして、各マンションでの部屋番号は右横の列に入力されており、仮にG列までに入力されているとします。
そこで作業列としてH列にはH1セルには0と入力し、H2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(B2="","",COUNT(B$2:G2))

別のシートのAおよびB列にお求めの表を作成するとしたら別のシートのA2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(ROW(A1)>MAX(Sheet1!H:H),"",IF(COUNTIF(Sheet1!H:H,ROW(A1))=1,INDEX(Sheet1!A:A,MATCH(ROW(A1),Sheet1!H:H,0)),INDEX(Sheet1!A:A,MATCH(ROW(A1),Sheet1!H:H,1)+1)))

B2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A2="","",INDEX(Sheet1!B:G,MATCH(A2,Sheet1!A:A,0),COUNTIF(A$2:A2,A2)))
    • good
    • 0
この回答へのお礼

申し訳ございません。

何度か試しましたが、私には使いこなす事ができませんでした。

回答ありがとうございました。

お礼日時:2011/11/29 13:01

 今仮に、元データリスト中で「マンションA」と入力されているセルが、Sheet1のA1セルであり、並べ替えた結果はSheet2のA列~B列の2行目以下に表示するものとし、部屋番号は全て数詞のみで表されており、「A101」等の様な文字が含まれた部屋は無いものとした場合には、次の様な方法があります。



 まず、Sheet2のA1セルに次の数式を入力して下さい。

=Sheet1!$A$1

 次に、Sheet2のA2セルに次の数式を入力して下さい。

=IF(ROWS($2:2)>COUNT(OFFSET(Sheet1!$1:$1,1,,MATCH("゛",Sheet1!$A:$A,-1)-ROW(Sheet1!$A$1))),"",INDEX(Sheet1!$A:$A,MATCH(A1,Sheet1!$A:$A,0)+(COUNTIF(A$1:A1,A1)>=COUNT(OFFSET(Sheet1!$1:$1,MATCH(A1,Sheet1!$A:$A,0)-ROW(Sheet1!$A$1),)))))

 次に、Sheet2のB2セルに次の数式を入力して下さい。

=IF($A2="","",SMALL(OFFSET(Sheet1!$1:$1,MATCH($A2,Sheet1!$A:$A,0)-ROW(Sheet1!$A$1),),COUNTIF($A$1:$A2,$A2)))

 次に、Sheet2のA2~B2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。

 以上です。
「エクセルで横データを縦に並べ変えたいです」の回答画像2
    • good
    • 1
この回答へのお礼

とても参考になりました。

ありがとうございました。

お礼日時:2011/11/29 13:00

コピー  して、  張り付ける  際に、  単なる  張り付け  をせずに、



「形式を選択して張り付ける」 を行います。

その際の オプションで  行列を入れ替える  を指定します。

この回答への補足

こちらの方法ですと列が増えてしまうので、列は2列で縦にデータをつなげていきたいのですが・・・?
わかりずらい説明で申し訳ございません。

補足日時:2011/11/28 20:47
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで横並びの複数データを縦の一本のデータにしたい

こんにちは。宜しくお願い致します。

   A   B  C
1 静岡 埼玉 
2 福島 東京 愛媛
3 青森 
4 長崎 徳島 愛媛
5 東京 千葉 
6 秋田 兵庫 大阪
.
.
.


例えばこういう形で好きな都道府県の上位3つの解答がそれぞれあったとします。(1個の人もいるし、2個の人もいます)

これを別のシート(同じシートの違う場所でも構いません)に縦並び1本で出したいときどうしたらいいでしょうか。

★こういう風にしたい★

静岡
福島
青森
長崎
東京
秋田
埼玉
東京
愛媛
徳島
愛媛
千葉
兵庫
大阪
.
.

※好きな県などが人によって重複していても構いません、また順不同でもいいです。(縦並びのデータに東京が20個あってもよいということ)

形式を選択して貼り付けで行列を入れ替えるではうまくいかないです。

宜しくお願い致します。

Aベストアンサー

VBAで、もっと簡単に。
下記をVBEの標準モジュールにコピーし貼りつけ。
元データのあるシートで、データのある範囲を範囲指定して(空白セルが範囲内にあっても結構)、下記を実行。
Sub ichiretu()
Dim cl As Range
p = 1
For Each cl In Selection
If cl <> "" Then
Worksheets("sheet3").Cells(p, "A") = cl
p = p + 1
End If
Next
End Sub
Sheet3のA列に並びます。

QEXCELで作成した表(横)を表(縦)に変換ができますか。

EXCELで作表しましたが、横向きに作成した数値の入った表を縦向きに直す方法はどうすればできるか教えてくださいませんか。

Aベストアンサー

表を選択してコピーします。
他の場所か他のシートに、「編集」>「形式を選択して貼り付け」で「行列を入れ替える」にチェックを入れてOKを押します。

Qエクセルで縦に並んだデータを横に並び替えたい

エクセルで↓ のようなデータがあります

 | A | B | C | D
1|A店|りんご| 2 |
2|A店|みかん| 3 |
3|A店|バナナ| 4 |
4|B店|りんご| 3 |
5|B店|バナナ| 2 |

これを以下のようなかたちにしたいのですが、一つずつ移動する以外に方法はありますか?

 | A | B | C | D | E | F | G |
1|A店|りんご| 2 |みかん| 3 |バナナ| 4 |
2|B店|りんご| 3 |バナナ| 2 |


100以上データがあり、手作業で移すのは大変です。
ちなみにVBAなどはほとんど理解できません。

何か解決策があればと質問させていただきたました。
よろしくお願いします。

Aベストアンサー

E列に店名リストを作成する
(なければフィルタオプションの設定で重複するレコードを無視するを使うとよい)

F1セルに 1 右へ連番
N2セルに =COUNTIF(A:A,E2) 下へオートフィル
F2セルに
=IF(F$1>$N2*2,"",INDEX($B:$C,MATCH($E2,$A:$A,0)+F$1/2,1))
G2セルに
=IF(F$1>$N2*2,"",INDEX($B:$C,MATCH($E2,$A:$A,0)+G$1/2-1,2))
F2:G2セルを選択して、右へオートフィル、そのまま下へオートフィル

E:N列を選択して 切り取り 別シートへ貼り付け

Qエクセル2003 横のデータを縦に並べたいです。

以前にも同じような質問をされている方がいるかもしれませんが、
どなたかお知恵をお貸しください。
関数を使用して処理したいと考えております。
下記にファイルの一部を抜粋致しましたので、
ご教授のほど宜しくお願い致します。

現在の形
   A      B      C      D      E
1 SHIRTS カラー黒  サイズ38  サイズ39  サイズ40

上記のような形で4000行くらいあります。
列は最長でABまで使用しております。
上記のようなデータを下記のような形に並べ替えたいと思っております。

希望の形
   A      B      C
1 SHIRTS カラー黒 サイズ38 
2 SHIRTS カラー黒 サイズ39
3 SHIRTS カラー黒 サイズ40

サイズの展開を横表示から縦表示に変更したいのです。
素人質問で申し訳ありませんが、どなたか宜しくお願い致します。

Aベストアンサー

こんにちは。
4000行ある時点で数式(関数)で処理をすることに抵抗を感じます。
VBAを使用したほうが賢明かと思います。
標準モジュールを追加し以下コードをお試しください。
尚、動作としてはSheet1にあるデータをSheet2に展開すると言った流れになっています。
質問の中で「最長でAB列まで」と言うことでしたが念のためBBやCB・・・までデータがあったとしても動作するよう作ってあります。
Sub Sample()
  Dim I As Long, X As Long
  Dim R1 As String, R2 As String
  I = 1: X = 1
  Application.ScreenUpdating = False
  Do While Range("Sheet1!A" & I).Value <> "" 'Sheet1の行移動ループ
    R1 = "": R2 = "C"
    Do While Range("Sheet1!" & R1 & R2 & I).Value <> "" 'Sheet1の列移動ループ
      Range("Sheet2!A" & X).Value = Range("Sheet1!A" & I).Value
      Range("Sheet2!B" & X).Value = Range("Sheet1!B" & I).Value
      Range("Sheet2!C" & X).Value = Range("Sheet1!" & R1 & R2 & I).Value
      If R2 = "Z" Then '列移動コード
        If R1 <> "" Then
          R1 = Chr(Asc(R1) + 1)
        Else
          R1 = "A"
        End If
      Else
        R2 = Chr(Asc(R2) + 1)
      End If
      X = X + 1 'Sheet2の次の行へ
    Loop
    I = I + 1 'Sheet1の次の行へ
  Loop
  Application.ScreenUpdating = True
  MsgBox ("完了")
End Sub

こんにちは。
4000行ある時点で数式(関数)で処理をすることに抵抗を感じます。
VBAを使用したほうが賢明かと思います。
標準モジュールを追加し以下コードをお試しください。
尚、動作としてはSheet1にあるデータをSheet2に展開すると言った流れになっています。
質問の中で「最長でAB列まで」と言うことでしたが念のためBBやCB・・・までデータがあったとしても動作するよう作ってあります。
Sub Sample()
  Dim I As Long, X As Long
  Dim R1 As String, R2 As String
  I = 1: X = 1
  Ap...続きを読む

QExcelで、横並べのデータを縦並べにリンクを貼りたい

エクセルにおいて、A1セル、B1セル、C1セル・・・と横に不連続な日付を並べた表があります。

日付は毎日追加していきます。入力された日付を別のシートに"="を使ってリンクを貼っておきたいのですが、リンク先では横ではなく縦にA1、A2、A3・・・と並べていきたいと思っております。

ちなみに、いったん別シートにA1セル、B1セル、C1セル・・・と横にリンクを貼った後、コピー→形式を選択して貼り付け(行列を入れ替える)で縦にしようとしてもうまくいきませんでした。
なお、その都度値複写をすることは考えておりません。

良い方法をご存知の方いらっしゃいましたら教えていただきたくお願いします。

Aベストアンサー

一旦別シートに横にリンクを貼る際に、=シート名!A$1、=シート名!B$1・・・と指定しましょう。

そうすれば、コピー→形式を選択して貼り付け(行列を入れ替える)で縦すればうまく出来るでしょう。

Qエクセルで1列に500行並んだデータを5列毎に改行

エクセル2000で、A1~A500までデータが縦並びに入力されています。

これを5列毎に改行して、横並びのデータに加工したいのですが、何か方法ありますか?

図解すると、、


A1
A2
A3
A4
A5
A6
A7


A500

のデータを

A1 A2 A3 A4 A5
A6 A7 A8 A9 A10
・・・・・・
A496 A497 A498 A499 A500



したいのです。

何かよい方法ありましたらお教え願います。

Aベストアンサー

'直接シートをいじるのでコピーをしてから試してみてください。
Sub Macro1()
COUNTER = 0
For INP = 1 To Cells(Rows.Count, 1).End(xlUp).Row Step 5
COUNTER = COUNTER + 1
Range("A" & INP & ":A" & INP + 4).Copy
Range("B" & COUNTER).PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
Next INP
Range("A1").EntireColumn.Delete
End Sub

Qエクセルで多数のシートをまとめる方法

エクセルで10以上あるシートを一発でひとつにまとめる方法はあるでしょうか?

コピー&ペーストを繰り返すしかないのでしょうか…

仕事で明日やらなければならないので、
お分かりになる方、是非教えてください!

Aベストアンサー

まぁ既出回答にもあるように,10数回程度コピー貼り付けすることで,どうという作業ではないとは思います。

さておき。
ご利用のエクセルのバージョンが不明ですが,ご利用のOfficeのバージョンによっては

1.ワードを起動する
2.挿入のファイルからエクセルブックを指定する
3.添付図のようなダイアログが表示されたらラッキー成功です,ブック全体を指定して挿入する
4.Ctrl+Aで全体を選び,コピーして,エクセルの新しいシートに貼り付ける

と一発でできます。
添付図のようにならなかったときは,出来ません。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Qエクセル2010 横の一部のデータを縦に

エクセル2010を使用しております。
その中で、横に並んだデータを縦にしたいのですが、それも一部のセルのみしたいのです。

例の画像通りなのですが、
都道府県別に、男、女のデータが横並びになっているものもを
その男、女のデータを縦並びにしたいのです。

縦にした際、都道府県は連続データとしてコピーしてきたいところなのですが、
これらを簡単に置き換えられる方法があれば教えていただきたいです。

どうぞよろしくお願いします。

Aベストアンサー

簡単!簡単!
A8: =OFFSET(A$2,(ROW(A1)-1)/2,)
B8: =OFFSET(B$1,,MOD(ROW(A1)-1,2))
C8: =OFFSET(B$2,(ROW(A1)-1)/2,MOD(ROW(A1)-1,2))
範囲 A8:C8 を下方にズズーッとオートフィル

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング