• 締切済み

エクセルマクロで並び替えが2つのグループになってしまった

マクロでシート1からシート2に別レイアウトを作ってソートしました。 前ゼロ有りの3桁数字なのでセルは文字列です。 ところが500件中30件ほどが文字列扱いされず前半の集団、残りが文字列(左上隅に緑の三角マーク)として後半の集団と泣き別れてしまいました。 もともと文字列のセルから移しているので両者の違いはさっぱりわかりません。 Range("C" & CNT).NumberFormatlocal = @ ’書式変更 Range("C" & CNT) = WorkSheets(1).Range("A" & CNT) ’転送 CNTは処理上のカウンターです。 全行編集後に Range("A1:H" & CNT).Sort Key1:=Range("C1"), Header:=xlGuess おかしな30件は左詰表示ですがF2を押すとなぜか右詰になり エンターキーで初めて左上隅に緑の三角マークが出ます。 手入力で試すと 「標準書式に数値入力」数値が右詰表示 「文字列に書式設定変更」→ 左詰表示に変わるが文字列ではない。 (この状態と同じだと思います。) クリックやF2でアクションを加えてやるとやっと文字列になるというのも同じです。 マクロでは文字列書式にしてから転送しているのにどうして上記と同じ現象になるのでしょうか。 直し方もしくは何らかアクションを加えてやるにはどうしたらよいでしょうか。 よろしくお願いします。 

noname#252806
noname#252806

みんなの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>30件は左隅に三角マークが無く「左詰表示だが文字列ではない。」 セルの表示形式はどうなってますか? 場合によっては、元シートのA列の書式変更をしてから実行してみては?(表示形式:文字列)

noname#252806
質問者

お礼

回答ありがとうございます。 >セルの表示形式はどうなってますか? 場合によっては、元シートのA列の書式変更をしてから実行してみては?(表示形式:文字列) 転送元のA列は文字列ですが、その内30件はもともと 左隅に三角マークが無く「左詰表示だがF2を押してみると 右詰に変わる」状態でした。 いくら転送先を文字列にしておいてもその中途半端な状態の ままで転送されるようです。 とりあえずRange("C" & CNT) = "'" & WorkSheets(1).Range("A" & CNT) にしたら明示的に文字列になったので これでやってみます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

With Range("C" & CNT)    .NumberFormatlocal = "@" ’書式変更    .Value = WorkSheets(1).Range("A" & CNT).Value ’転送    .Value = .Value End With とかにしてみるとか?

noname#252806
質問者

補足

回答ありがとうございます。 VALUEでの置き換えを試してみましたが変わらずでした。 なお30件と他の違いがわかりました。 転送元のシート1のA列は文字列書式になってましたが 30件は左隅に三角マークが無く「左詰表示だが文字列ではない。」 状態で、そのままシート2に転送されていました。 他は三角マーク付きでした。

関連するQ&A

  • 度々エクセルマクロで質問です

    前回は皆様有り難うございました。 度々で申し訳ございません。 前回、エクセルマクロで、仮に columns("C:C").interior.colorindex = xlnone cnt = 1 temp = range("a1").value cells(cnt,3).resize(temp).interior.colorindex = 3 cnt = cnt + temp temp = range("a2").value cells(cnt,3).resize・・・・・ というマクロを教えて頂きました。 この状態ではA列の数字の分だけ、C列のセルを色分け できる訳ですが、この色分けと同じ範囲のセルをD・E 列にて罫線を引きたいのですが(範囲内すべてのセルの下線及びE列のセルの右側に縦線)このマクロにどのような マクロを追加すべきなのでしょうか? 変な質問ですみません。 初心者なので教えて下さい。

  • エクセル・並び替えのマクロ

    エクセルで並び替えのマクロを作ったのですが ___A ______B ______C ______D ______E ______F _____________G 1 (株)カネカ【東証1部 : 4118.T】 2 日付 __始値 _高値 _安値 _終値 _出来高 ___調整後 3 07/07 1,030 1,069 ___941 __974 30,772,000 ___974 4 07/06 1,057 1,093 1,016 1,033 26,904,000 1,033 5 07/05 1,080 1,086 1,023 1,051 26,541,000 1,051 6 07/04 1,113 1,209 1,087 1,098 36,317,000 1,098 7 07/03 1,096 1,128 1,020 1,124 23,988,000 1,124 8 07/02 1,098 1,147 1,020 1,105 28,609,000 1,105 9 07/01 1,100 1,158 1,078 1,082 17,808,000 1,082 このような表で マクロ記録開始 セルA3をクリック データ→並び替え 優先されるキー:日付・昇順 データ範囲の先頭行:タイトル行 マクロ記録終了 で、できたマクロが Sub Macro1() Range("A3").Select Range("A1:G9").Sort Key1:=Range("A3"), Order1:=xlAscending,Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub これを実行すると 1行目、2行目の(株)カネカ、日付、始値…、が8行目、9行目になってしまいます そこで、マクロの Range("A1:G9")を Range("A3:G9")に書き換えて Sub Macro2() Range("A3").Select Range("A3:G9").Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub これを実行すると 日付が、07/07、07/01、07/02、07/03、07/04、07/05、07/06 の順番になってしまいます どうしたらよいのでしょう?

  • エクセル2003 並び替えとマクロ

    OSはウィンドウズXPです。質門は、 1.シートを保護するとマクロが動かないこと 2.マクロの実行前にブックを新しく保存したいことです。 ワークシートは  B---略-----L---------N -------O   1 所在   コード  所有者  備考   2 東京    1    甲 3 埼玉    2    乙    ***   マクロはボタンで作動するようにして以下のようになってます。 Private Sub 所有者ソート_Click() タイトル = "選択" メッセージ = "所有者で並べ替えます" スタイル = vbYesNo + vbQuestion + vbDefaultButton1 + vbApplicationModal yesno = MsgBox(メッセージ, スタイル, タイトル) If yesno = vbYes Then 上 = 5 左 = 2 右 = 25 '右端 25=X列 下 = Range(Cells(上, 左), Cells(上, 左)).End(xlDown).Row Range(Cells(上, 左), Cells(下, 右)).Select Selection.Sort _ Key1:=Range("N1") _ , Order1:=xlAscending _ , Header:=xlGuess _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin End If End Sub B列からX列までデータがあり、VLOOKUP関数でリストから参照させたりしてます。この関数の入ったセルは変更したくないのでロックしてます。保護したまま並び替えできるとベストですが、できますか? さらに並び替えのミスで(たとえば選択範囲がN列までになってしまい備考欄が誰のかわからなくなった等)もとに戻したいとき、マクロだと"元に戻す"がきかないので、作業前の状態を保存しておきたいです。 ちなみにエクセルは初心者、マクロは初心者以下です。 素直にマクロを使わずにやったほうがよいですか?

  • エクセル 文字列で入力した数字を数値にする

    エクセルで、文字列の設定で入力した数字は、[セルの書式設定]で、数値として設定しても、文字列のままになります。 (セルの左上に、文字列と分かる緑の三角が付いたままになり、表を作ってもグラフの表示は出来ません。) 数値として数字を入力をした後、[セルの書式設定]で文字列にして、再び[セルの書式設定]で数値にすると、数値にはなります。 (この場合、文字列にしても、セルの左上に緑の三角が付かず、このまま表を作ると数値(小数点以下が0の場合は小数点以下が削除されます。)の扱いとなりグラフの表示が出来ます。) 文字列で入力した数字は、数値にはならないのでしょうか? よろしくお願いいたします。

  • エクセルのマクロ中で

    飛び飛び(ctrl+クリック)で選択された値を 別シートに貼り付けるマクロを作成中です。  元はD列にある値なのでRange("D" & cnt)として (cntは変数)  cnt = Selection.Row.Countで行番号を取得しようと しましたがうまくいきません。 D1から順番に縦方向に最終データまでは行けるのですが ・・・  初心者に「産毛」が生えたくらいです。ご教授お願いします

  • マクロ 並び替え

    Sub 並べ替え() With Worksheets("Sheet1").Sort .SortFields.Clear .SortFields.Add Key:=Range("e6"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ CustomOrder:="金,銀,銅" .SetRange Range("a6:Cl16").CurrentRegion .Header = xlNo .Apply End With End Sub 6行目~16行目で並び替えを行ってほしいのですが、1行目から並び替えになります。 .SetRange Range("a6:Cl16").CurrentRegion と記入しているので6列目からになると思っていたのですが。 マクロ初心者のため詳しい方がいれば教えて下さい。

  • EXCEL VBAマクロについて質問です

    Excel VBAマクロについて質問です ※Excel Ver.は2005でやってます 例のような感じで、 同じ列(列1)に或る同じ列名の数字(列2)を足して 違うセル、または違うブックの指定行に合計値を横並び表示させたいのですがうまくいきません 例のように 同じ言葉が含まれているもの(りんご・青りんご)は足して出したいと思ってます 【理想】実行前 ****************************** 番号  名前  個数 001   りんご  1 002   ばなな  2 003   いちご  3 001   青りんご 2 ****************************** 【理想】実行後 ****************************** 番号   りんご  ばなな  いちご 001    3      -     - 002    -      2     - 003    -      -      3 ****************************** ※「-」記号はついてなくても大丈夫です 現在、組んでいるコード・実行結果をのせておきました どなたか享受ください、お願いいたします j = 1 For i = 0 To Range("A65536").End(xlUp).Row cnt = cnt + Range("列2" & i).Value If Range("C" & i + 1).value <> Range("C" & i).value Then 'もし次の行が違う名 Range("任意セル" & j).Value = Range("A" & i).Value '列1 Range("任意セル" & j).Value = Range("B" & i).Value '列2 Range("任意セル" & j).Value = cnt '数字合計 j = j + 1 '出力行カウントアップ cnt = 0 End If Next

  • エクセルマクロのソートについて

    こんにちわ! エクセルマクロのソートについて質問です。 プロシャージャを使ってソート使いまわそうと思うのですが、範囲、並び替えキーを変えたいと思うのですが可能でしょうか? Sub Sort()    Range("A1:c10000").Sort _ Key1:=Range("a1") , Order1:=xlAscending _ , Header:=xlGuess _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin End Sub 一応、動作はしませんが下記のようなイメージで動かしたいです。 Sub Sort() Dim key As String Dim hanni As String key = Range("a1") hanni = Range("A1:c10000") 'セルhanniの範囲のデータをkey列をキーに昇順に並べ替えます hanni.Sort _ Key1:=key _ , Order1:=xlAscending _ , Header:=xlGuess _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin End Sub 可能でしょうか? わかる方おりましたらアドバイスの程お願いします。

  • エクセル マクロ 足し算

    いつもお世話になります。マクロ勉強中の初心者です。 マクロの足し算を教えてください。 A列  B列  C列 ・・・・  1   2    3  4   5    6  7   8    9 という数字のデータがあります。 これらのA列の合計、B列の合計・・・など列の合計を出すマクロはわかるのですが、  作成したVBA    Range("a4") = Application.WorksheetFunction.Sum(Range("a1:a3")) A列の合計(A1~A3)とB列の合計(B1~B3)とC列(C1~C3)の合計を、D4に合計させる方法を 教えてください。 どうぞよろしくお願いします。

  • Excelマクロで入力によって出力の文字列を変える

    Excel2003マクロである文字列の時に違う処理をしたいと考えています。 例えば、 C6のセルに「***-222-333-444」が入力されているとします。 この文字列をSplit(Range("C6"), "-")で分割し、***をC7に出力します。 このとき、「***」が「666」の場合は「666-777」 それ以外はそのままをC7のセルに出力したいと考えています。 自分で作ったマクロは tmp = Split(Range("C6"), "-") If tmp(0) = "666" Then Range("C7") = "666-777" End If Range("C7") = tmp(0) ですが、「666」のままになってしまいます。 この後の処理として、行きたいサイトのアドレスを生成しますので、 できれば出力先はC7のセルに固定したいのですが、どうすればよろしいでしょうか? よろしくお願いいたします。

専門家に質問してみよう