• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:矩形範囲の複数列を縦1列に並べ替えエクセルVBA)

エクセルVBAで矩形範囲を縦1列に並べ替える方法とは?

eden3616の回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.24

「&#数値;」は数値文字参照における10進数表記になります。 http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E5%8F%82%E7%85%A7 「'」はシングルクォーテーション(アポストロフィ)の数値文字参照となります。 http://ja.wikipedia.org/wiki/%E2%80%99 (上記Wikiの符号位置の項目に記載されております) ですので、数値文字参照をデコードするような処理を組み込めばよいかと。 VBAではChr(39)で「'」を取得できます。 これを用いてデコード用の関数「deco」を作成してみました。 以下を標準モジュールに貼り付けてから「テスト」を実行してみてください。 __________________ Sub テスト() '型宣言 Dim word As String '文章を変数wordに格納 word = ""はダブルクォート" _ & vbCrLf & "$はドル" _ & vbCrLf & "%はパーセント" _ & vbCrLf & "&はアンパサンド" _ & vbCrLf & "'はアポストロフィー" '変数wordをデコードしてダイアログで表示 MsgBox deco(word) End Sub '▼▼▼以下でコード用のコード▼▼▼ Function deco(target As String) As String '型宣言 Dim rematch Dim hit As String Dim re As Object Dim word As String Dim i As Long '正規表現を利用するための準備 deco = target Set re = CreateObject("VBScript.RegExp") '正規表現のパラメータをセット re.Global = True re.ignorecase = False re.pattern = "&#\d+;" '正規表現で検索 Set rematch = re.Execute(target) 'マッチした部分を格納 For i = 0 To rematch.Count - 1 hit = hit & rematch(i).Value & "," Next i '不要な部分を削除 hit = Replace(hit, "&", "") hit = Replace(hit, "#", "") hit = Replace(hit, ";", "") hit = Left(hit, Len(hit) - 1) '「,」で分割して配列に格納 code = Split(hit, ",") '文章を置換して返す For i = 0 To UBound(code) deco = Replace(deco, "&#" & code(i) & ";", Chr(Int(code(i)))) Next i Exit Function End Function  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 変数wordに格納した以下の文章が "はダブルクォート $はドル %はパーセント &はアンパサンド 'はアポストロフィー 以下の文章にデコードされて表示されます "はダブルクォート $はドル %はパーセント &はアンパサンド 'はアポストロフィー

noro6857
質問者

お礼

質問が波及してしまってすみません。 ご指示のVBAはEnd Subによりメッセージ表示までで終わってしまいますが ▼▼▼以下でコード用のコード▼▼▼ のほうはどのように処理すればいいのでしょうか。 なお、前問のVBAは、MSXML2使ったダウンロードという前提で VBAがつくられているようです。 必要であれば、そのQNoを記述しますが、この項目でこれに関する質問を続けることが適切かどうかで気にしています。

関連するQ&A

  • アクティブセルの行のセルを複数指定選択-VBA

    アクティブセルの行のセルを複数指定選択-VBA コマンドボタンを押すとアクティブセルのある行のセルを個別に選択したいのですが、どのようにVBAにコードを入力すればいいのか悩んでいます。 例:選択したい列(セル)A:C,F:I アクティブセルがA2にある時、コマンドボタンを押してA2,B2,C2,F2,G2,H2,I2を選択する。   アクティブセルがA10にある時は、A10,B10,C10,F10,G10,H10,I10を選択する。 ご回答お待ちしています。宜しくお願い致します。

  • ExcelのVBAで複数の範囲を指定したいのですが

     ExcelのVBAの全くの初心者です。(PC全般については、多少はわかるつもりですが)  R1C1参照という形式を使って、複数のセル範囲を色付けするため指定するにはどのようにすれば良いのでしょうか?  例えば、アクティブセルにA25が指定されていて、A4~C7とE4~F10とI4~I8までを色付けしたいなどという場合。  色付けなどは、わかるのですが、複数の範囲指定がわからないのです。よろしくお願いします。

  • エクセルVBAで列の選択

    VBAで通常は、Columns("D").Select でD列が選択されるはずですが、途中にセルが結合している個所があると、選択範囲の列が、すべての行で広がってしまいます。 手動で列番号をクリックするとD列だけの選択ができるのにVBAではなぜ出来ないのでしょう? どうコードを変えればいいのでしょうか? エクセル2000です。

  • 【Excel VBA】複数範囲の並べ替えは可能でしょうか?

    【Excel VBA】複数範囲の並べ替えは可能でしょうか? Excel2003を使用しています。 CSVデータを元に作成された下記のような表があります。 A列…日付、B列…受注番号、C列…摘要(会社名・品名等)、D列…金額となっています。 6行目以下に上記の内容でデータが入力されていますが、会社ごとのデータ内で日付順に並べ替えをしたいのですが、VBAで複数の範囲を選択して、それぞれの範囲内での並べ替えは可能でしょうか?     A     B     C    D 6             ○○会社 7   1/20   123   AAA   1,000 8   1/15   120   BBB   2,000 9 10              計     3,000 11 12            ××会社 13 計の1行上と下は空欄行で、以下、会社名の後にデータが続くというパターンの繰り返しで数十社分あります。 Excelのデータ⇒並べ替えでは複数選択した状態での並べ替えはできないので、VBAで可能であればと思い、質問させていただきました。 よろしくお願いします。

  • エクセル2003VBAで選択範囲

    いつもお世話になっています。 エクセル2003を使用しております。下記を関数又はVBAの組み方・構文を教えて下さい。 (1)E列には、「1」と「.」と「空白」が入っています(「1」が入ってないケースもあります)が、「1」を検索します。もし「1」が無ければ、J列を同様に検索します。(中身はE列と同じです) (2)「1」が入っているセルから見て、「行」の±10の範囲内を選択し、別シートにコピーする。 例1. 1が入っているセルが、「E15」とします。 この場合、コピーしたい範囲は、5行目全部~25行目全部です。 例2. 1が入っているセルが、「E17」とします。 この場合、コピーしたい範囲は、7行目全部~27行目全部です。 分かりにくいかもしれませんが、よろしくお願いします。

  • エクセルVBAで範囲指定の方法をおしえてください

    エクセルVBAで範囲指定の方法をおしえてください こんばんは。 以下のようにデータがあるとします。 222 111 333 555 888 999 454 665 222 111の文字列を含むセルから888の文字列を含むセルまでをVBAで範囲指定したいのですが 方法がわかりません。 エクセルに読み込むファイルによって目的の情報の位置が変わるため、文字列を基に範囲指定したいのです。 本当に困っていますよろしくお願いします。

  • エクセルVBAについてお尋ねいたします。以前、列の検索範囲から指定列中

    エクセルVBAについてお尋ねいたします。以前、列の検索範囲から指定列中の空欄セルが存在した際にその空欄を含む行の削除を実行するマクロを組んだのですが、削除する行の範囲も指定するマクロに組み替えたく望んでおります。 <参照> Private Sub CommandButton1_Click() Dim minRow As Integer Dim maxRow As Integer Dim checkColIndex As Integer ' 初期値1(開始行の値) minRow = 1 ' 初期値2(終了行の値) maxRow = 10 ' 検索列の値(1=A列、2=B列、3=C列...) checkColIndex = 1 Application.ScreenUpdating = False ' 空欄が存在する行の削除処理 For i = maxRow To minRow Step by - 1 ' 指定セルが空欄の場合、その行を削除 If (Len(ActiveSheet.Cells(i, checkColIndex).Value) = 0) Then ActiveSheet.Rows(i).Delete End If Next Application.ScreenUpdating = True End Sub 上記のコマンドを例にすると、 1行目から10行目までのA列に存在する空欄を検索し、空欄が存在したら範囲中の最下(10行目)よりセルを含む行ごと削除・・・ となりますが、この中に <例> ’削除を行う範囲(1=A列、2=B列、3=C列...) ' 開始列値 *** ' 終了列値 *** '範囲内の行を削除 *** など、検索範囲が変わった際にも対応が可能で削除範囲が指定出来るコマンドに変更したく望みます。 宜しくお願い致します。

  • 矩形範囲の複数列を縦1列に並べ替えVBA(続)

    次のVBAは矩形の範囲を縦一列に並べ替えるものでここで教えていただきました。 これはM1~R**のデータをM1-M**/N1-N**/O1-O** …というふうに矩形の範囲内を順に縦一列にするものですが、これを並べる順序を任意にしたい場合にはどこを修正したらいいでしょうか。 すなわちM1-M**の次にP1-P**、N1-N**というような感じです。 当方VBAはよく知らないため教えていただいたままで動かしています。 (Office2013/Windows7) よろしくお願いします。 Sub action() '型宣言 Dim st As String, ed As String Dim stcol As Long, edcol As Long Dim strow As Long, edrow As Long Dim retu As Long, gyou As Long Dim fname As String, tpath As String Dim fcnt As Long 'データの範囲(左上のセルと右下のセル)アドレスを指定 st = "M1" ed = "R200" 'セルアドレスより各行列番号を取得 stcol = Range(st).Column edcol = Range(ed).Column strow = Range(st).Row edrow = Range(ed).Row 'セル範囲が選択中の場合 If Selection.Count > 1 Then stcol = Selection(1).Column edcol = Selection(Selection.Count).Column strow = Selection(1).Row edrow = Selection(Selection.Count).Row End If '出力先のファイル名を処理 If Cells(strow, stcol).Text = "" Then fname = "不明(" & Cells(strow, stcol).Address & ")" Else fname = Cells(strow, stcol).Text End If ngs = Split("■,\,/,:,*,?,"",<,>,|", ",") For Each ng In ngs fname = Replace(fname, ng, "#") Next dpath = "H:\■DATA\DATAB" If Dir(dpath, vbDirectory) = "" Then Debug.Print "dpath = " & dpath MsgBox "パスが不正です" Exit Sub End If tpath = dpath & "\" & fname & ".txt" Do Until Dir(tpath) = "" fcnt = fcnt + 1 tpath = dpath & "\" & fname & "_" & fcnt & ".txt" Loop Open tpath For Output As #1 '列方向にループ For retu = stcol To edcol '行方向にループ For gyou = strow To edrow If Cells(gyou, stcol).Text <> "" Then Print #1, Cells(gyou, retu).Text End If Next gyou Next retu Close #1 Dim objFSO As Object 'FileSystemObject オブジェクト Dim objTS As Object 'TexobjTStream オブジェクト MsgBox tpath & vbCrLf & "に出力しました" End Sub

  • データの一部範囲について、並替等のVBAを作りたい

    データの一部範囲について、並べ替え等のVBAを作りたい。 次のようなVBAを作りたいのですが、当方知識がほとんどないためお力を貸してください。 データの内容 A列たてに2行目「6時台」12行目「7時台」というふうに、10行くらいおきに「○時台」の文字が24時台まで入る B列~C列A列にあわせた行数の文字列が入る E列~N列関数式の入ったデータが入る、A列~C列のからデータにあわせてデータより余分に関数式が入りデータ空白はIF(B="","", )で空白扱い。 処理したい内容 まず例として11時台~12時台の範囲(11時台のセルから13時台の文字の前の行まで)についてのみ対象として E列~J列までを、たて一列にする。E1~Exその下にF1~FxというふうにJ列まで。ただし並べ順はE,G,H,F,I,Jのようになる。 この場合の「E1」とは11時台のセル行位置 次にH~N列の矩形をそのままCopy これらのデータをテキストとして作成保存 時間の範囲は、A1に入るデータの日付(Bookごとに異なる)による曜日によって異なるので 「固定式」をいくつか作ってcaseで選択を予定していますが 汎用性として、最初の時間とうしろの時間を指定する任意の範囲式も作っておきたいです。 現在は、boxで時間を入れ、検索で○時台を見つけその上に空白行を3行入れ 続いてうしろの行も時間指定により3行空白を入れ、データ(関数式)の途切れる範囲内を作り、 その場所に手動でジャンプさせ、並べ替えマクロを動作さテキスト化しています。 また矩形部分はマウスで範囲を反転させたものをCopyしてそのテキストにあとから貼り付けています。 全体を対象としたVBAはここで作成していただいたのですが、途中の一部範囲を対象としたものが必要になったためお知恵をお借りしたいと思います。 よろしくお願いします。 Windows7/Office2013

  • エクセルVBAで範囲の指定をしたいです(初心者)

    エクセルVBAで範囲の指定をしたいです(初心者) 列AからJがデータが入る範囲です。 列AとBとCには必ず数値等が何かしら入ります。 列Dは常に空白です。 列E以降は何か入ることも入らないこともあります。 7行目までデータがある場合、 A1セルからこの場合はJ7セルまでを範囲指定したいのですが 行数は未定なので、 Range("A1").Select Range(Selection,Selection.End(xlDown)).Select でA列のデータ最終行まで下がり、そこから9つ右の列までを 範囲指定するというのがよくわかりません。 自動記録で絶対参照と相対参照を切り替えてやってみたのですが、 どうしても Range(Selection, Selection.End(xlDown)).Select ActiveCell.Range("A1:J7").Select と常にA1からJ7が指定になってしまいます。 バージョンは2003です。 つたない質問文で申し訳ありませんが、 どなたか宜しくお願いいたします。