アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

現在の形
   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 回答 (3件)

こんにちは。


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
「エクセル2003 横のデータを縦に並べた」の回答画像3
    • good
    • 0
この回答へのお礼

こんばんは。
ご丁寧にありがとうございます。
画像まで付けていただき、とてもわかりやすかったです。
ご指摘の通り、関数で処理するには無理があったようです。

明記していただいたとおりに作成してみたところ、
あっさり処理することができました。

本当にありがとうございました。
心から感謝いたします。

お礼日時:2010/01/20 00:10

「現在の形」が Sheet1 にあり、「希望の形」を Sheet2 に作成するものとします。


Sheet2!A1: =OFFSET(Sheet1!A$1,(ROW(A1)-1)/3,)
Sheet2!B1: =OFFSET(Sheet1!B$1,(ROW(A1)-1)/3,)
Sheet2!C1: =OFFSET(Sheet1!C$1,(ROW(A1)-1)/3,MOD(ROW(A1)-1,3))
    • good
    • 1
この回答へのお礼

こんばんは。

簡潔にお答えいただきありがとうございます。
明記していただいたような方法があるのですね。
とても勉強になりました。

質問へのご回答ありがとうございました。
本当に助かりました。

お礼日時:2010/01/20 00:15

>>関数を使用して処理したいと考えております。



むりだと思います。

VBAでマクロをつくって作業するしかないです。

雛形として  1行分を縦にする作業をおこない、これをマクロに記録します。

あとはこれを入力のデーター行数分、繰り返すようにマクロを改造すればできあがりです。
    • good
    • 0
この回答へのお礼

こんばんは。

やはり関数で処理するには厳しいようですね。
ご意見ありがとうございます。

おっしゃるとおり、VBAを使用し作業いたします。

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

お礼日時:2010/01/20 00:18

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