質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

2358閲覧

Excelマクロで並び替え

techno

総合スコア22

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/11/07 04:10

編集2017/11/07 05:41

###前提・実現したいこと
Excelの数値等をマクロで並び替えがしたいのですがその方法が分かりません
中身を任意の事で並び替えるのではなく

ただ単に左の表のデータ
上から下へ並んでいる物を

下から上へ並び替えて移したいだけです
(今はテストなのですが本番はいくつ行があるかわかりません、その時々で変わります)

イメージ説明

###試したこと
いろいろ調べたのですが中身の数値等を入れ替えるマクロが多く
純粋にこういったものの例題が見つけることができなかったので
質問させていただきました(検索の仕方が悪かったかもしれません)

何卒、ご教授願えないでしょうか。
よろしくお願い致します

###補足情報
結果に左側の「テスト」の列は要りません
元々の数値をそのままにしておいて
「B列の名前」と「C列の数値」結果だけを別の列に移し表示たいです
(グラフ通り)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

※「テスト」列が1から始まる順序番号 という前提ですが、

(1)ABC列をDEF列にコピー。
(2)DEF列を選択範囲にして、D列を降順ソート
(3)D列をクリア

で、これをマクロにしたければ、全体をマクロ記録。
というのじゃダメですか?

投稿2017/11/07 06:51

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

techno

2017/11/07 07:18

h.horikoshiさん お返事ありがとうございます マクロ記録!!盲点でした。 試してみましたが中身でソートされてできませんでした。
guest

0

自己解決

色々調べてみて

隣の列に連番を打ち逆順にソートというので解決出来ました

投稿2017/11/07 07:19

techno

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jawa

2017/11/07 08:08

自己解決されたようですが、(テスト列のような)連番の列を用意し、逆順(降順)でソートしたわけですよね。 それだけ聞くとh.horikoshiさんのアドバイス通りのように聞こえますが(^_^; なお、マクロの記録でコードを自動作成された場合、例えばRange("B2:C10")のように固定範囲指定の記述になっていると思います。 「本番では対象範囲が可変」とのことですので、データが入力されている最終行までを範囲とする必要がありそうです。 最終データ行は`Cells(Rows.Count, "B").End(xlUp).Row`というコードで取得することができます。 解説すると、`Rows.Count`はそのExcelのバージョンで使用可能な最大の行番号を返すので、`Cells(Rows.Count, "B")`はB列の最終行のセルという意味です。 続く`.End(xlUp)`は、そのセルから[Ctrl+↑]操作をした時のセルを指します。 B列最終行のセルから[Ctrl+↑]の操作をすると、B列を下から順に探していって最初にデータが入力されているセル(つまりB列で一番最後にデータ入力されているセル)に移動します。 最後の`.Row`でそのセルの行番号が取得されるので、`Cells(Rows.Count, "B").End(xlUp).Row`は`B列で最後にデータが入力されている行番号`となるわけです。 セル範囲を指定するにはRangeを利用しますが、これにはいくつか記述方法が用意されています。 `Range("B2:C10")`のように固定範囲を直接指定することもできますが、`Range(Cells(2, "B"), Cells(10, "C"))`のように始点セルと終点セルを指定することもできます。 これらを組み合わせるとコピー元やソートの範囲を自動的に可変させることができるようになります。 ``` Dim lLastRow As Long Dim rngCopy As Range Dim rngSort As Range 'B列の最終データ行を取得 lLastRow = Cells(Rows.Count, "B").End(xlUp).Row 'B2~C列の最終データ行までをコピー元用の範囲として取得 Set rngCopy = Range(Cells(2, "B"), Cells(lLastRow, "C")) 'E2~F列の最終データ行までをソート用の範囲として取得 Set rngSort = Range(Cells(2, "E"), Cells(lLastRow, "F")) ``` コメントでの長文失礼しました。 参考になれば幸いです。
techno

2017/11/07 08:39

jawaさん お返事ありがとうございます いえいえお返事して頂けるのに長文も、短文も関係ないと思います 凄く丁寧なご説明心より感謝いたします 細かく解説して頂き凄く凄く勉強になりました ありがとうございます 私、VBAやVisual Studio 等でやっと変数の使い方を覚えた程度でして今回のプログラムも変数等々を使って記述するのは分かるのですが記述するにあたり必要な単語?記述等々が分からずこの場で質問した次第です。 もう少し勉強してjawaさんから教えて頂いた プログラムを試してみたいと思います ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問