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

横書きになっているデータを、図の様に縦配列にしたいのです。データ量が膨大で毎日更新する為、コピペでは間に合いません。マクロの知識も皆無で、大変困っております。お助け下さいませ。

「エクセルデータの並び替え。範囲のあるデー」の質問画像

質問者からの補足コメント

  • データには空欄も存在します。空欄はそこに停車しない事になります。

      補足日時:2016/12/09 10:51

A 回答 (6件)

No2さんが懸念しているとおりになりそうなので、ヒントだけです。


数式中の数値5は、停車駅の数です。$1:$7は、上表の行範囲です。
ちなみに、車名の増減は数式に影響を与えません。
    • good
    • 1
この回答へのお礼

返信ありがとうございます。

確かにデータの些細な変更により、その都度数式の変更は発生するでしょう。
ただ車両の台数と駅名の増減のみなので、その変更をヒントをもとに
やってみます。

帳票の作成方法や形式、処理方法などを見直す

おっしゃる通りですね。
自社だけのデータなら良いのですがね。

お礼日時:2016/12/11 18:21

こんにちは。

 ANo2です。

解決なさったのかそうでないのかわかりませんが・・・

>帳票の作成方法や形式、処理方法などを見直す
と書いたのは、将来的に考えた場合、質問者様や同僚の方が業務の中にブラックボックスを持ち込まない方が良いという意味も含めています。
元のデータの形式が変えられないのは条件として考えれば良く、自分たちが扱える範囲内で効率よくかつ理解できる方法を模索するのが宜しいと思います。
場合によっては、他部署や他社が協力できる範囲内で、そちらの処理も変更してもらうこともあり得るでしょう。
・・・とはいうものの、ANo4様がすでに関数での回答を示してくださっていますので、行の計算の仕組みさえ理解できればほぼ解決とも言えますね。

停車駅を可変にするには、数をどこかのセルに手入力してそれを参照する式に変えても良いですし、手入力も省きたいのなら、例えばA列で「空白でない行数」-2を算出して停車駅数とすることでも可能と思います。
ただし、この場合は、出力するセルにはA列が使えなくなりますので、表全体を一列右にずらすとか、いっそのこと別シートに作成するなどが良いのかもしれません。
台数(列数)を可変にするには、入力がない場合は出力も空白になるような式にしておいて、あらかじめ関数式を必要そうな最大行までオートフィルしておくといった方法などが考えられます。
(いろいろ便利にすると、だんだん式が長くなっていきますが…)


今さらかも知れませんが、これまでで理解できた範囲内で、同様の処理をマクロ化してみましたのでご参考までに。
※ A列と1行目にはそれぞれ停車駅と号車番号が必ず連続入力されており、最終行(列)の次のセルは空白になっているものと仮定しています。

>データ量が膨大で~~
以下は1シートのみを処理するものですが、「大量のデータ」が別ブックになっているのか別シートなのか等はわかりませんが、複数あるデータを一括で処理してしまうことも可能だと思います。
そのあたりの改変については、お勉強がてらに試してみてください。

Sub Sample()
Dim sorce As Range, rng As Range
Dim rw As Long, col As Long, c As Long

'入力範囲を確認
rw = Cells(1, 1).End(xlDown).Row
col = Cells(1, 1).End(xlToRight).Column
If rw < 3 Or col < 2 Then Exit Sub

'出力範囲を一旦クリア
Cells(1, 1).Offset(rw + 1).Resize(Rows.Count - rw - 1).EntireRow.Delete
Set Source = Cells(3, 1).Resize(rw - 2)
Set rng = Source.Offset(rw)

'各列毎に表を作成
For c = 2 To col
 rng.Value = Cells(1, c).Value
 rng.Offset(, 1).Value = Cells(2, c).Value
 rng.Offset(, 2).Value = Source.Value
 rng.Offset(, 3).Value = Source.Offset(, c - 1).Value

' 罫線処理
 With rng.Resize(, 4)
  Borders.LineStyle = xlContinuous
  Borders.Weight = xlMedium
  Borders(xlInsideVertical).Weight = xlThin
  Borders(xlInsideHorizontal).Weight = xlThin
 End With

 Set rng = rng.Offset(rw - 2)
Next c

End Sub
    • good
    • 1
この回答へのお礼

fujillin様、アドバイス及びマクロ化ありがとうございます。
返信頂いた内容を理解するまでに時間がかかりそうです。
勉強を含め、トライしてみます。
どうしてもわからないときには、またご質問させていただきます。
ありがとうございました。

お礼日時:2016/12/15 12:14

添付画像の上表の開始位置は、A1セルですよね?


下表は上表と同じシートにあって、10行目からで良いのですよね?
データ量が広大とのことですが、増えるのは車名ですよね?
停留所は固定で、増えないですよね?

上記の前提で良ければ、次の数式を入力してから下へオートフィルでコピーすれば行けると思います。ちなみに、D10セルは書式設定でお好みの日付としてください。

A10セル =INDEX($1:$1,1,(ROW(A1)-1)/5+2)
B10セル =INDEX($2:$2,1,(ROW(A1)-1)/5+2)
C10セル =INDEX($A:$A,MOD((ROW(A1)-1),5)+3,1)
D10セル =IF(INDEX($1:$7,MOD((ROW(A1)-1),5)+3,(ROW(A1)-1)/5+2)="","",INDEX($1:$7,MOD((ROW(A1)-1),5)+3,(ROW(A1)-1)/5+2))
    • good
    • 0
この回答へのお礼

ママチャリ様、返信ありがとうございます。
表は同じシートに存在します。
試してみたところ、うまくいきそうです。

但しスケジュールがエクセルシート毎に複数存在しており、そのシート毎に停車駅(八重洲、新宿・・・)数が変化致します。

ママチャリ様にお願い致します。
停車駅や車名の増減があるときは、数式のどの部分を変更すればよいのかをご教示頂けませんでしょうか?

何卒宜しくお願い致します。

お礼日時:2016/12/11 13:11

>コピペでは間に合いません。



|ω・`)っ「人海戦術」
    • good
    • 0
この回答へのお礼

返信ありがとうございます。人がたくさんいればいいのですけどね。

お礼日時:2016/12/11 12:53

こんにちは



ご質問の内容はマクロで処理可能と思いますが、
>マクロの知識も皆無で、大変困っております。
ということと
>データ量が膨大で毎日更新する為、コピペでは間に合いません。
の両方を考えると、将来ささいな変更などが出た場合に、お手上げ状態になりかねません。

日常業務とのことですので、業務の効率化のために帳票の作成方法や形式、処理方法などを見直す方がよろしいのではないでしょうか?
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。もとデータが既に存在しており、そのデータを利用する条件が必須でしたので。今後の仕事の進め方の参考にさせていただきます。

お礼日時:2016/12/11 12:52

表全体を選択してコピーしてから,


「形式を選択して選択」の [行列を入れ替える]にチェックして貼付けでは
    • good
    • 0
この回答へのお礼

回答ありがとうございます。この元データからの作表では、ご教示の方法ではできませんでした。

お礼日時:2016/12/11 12:50

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