• ベストアンサー

エクセルの並び替えがうまくいきません

kenken0001の回答

  • ベストアンサー
回答No.7

計算式が入っている空白のセルをnullにします。 空白セルのある列の最上段のセルを 1クリックしてからマクロを開始してください。 一度でも使用したことのあるセルを最終行と するので、ごみが下の方にあるとそこまで 処理します。使っていないセルが表外にある 時は削除して、上書保存後に使ってください。 ごみは時間がかかるという程度の問題ですが。 これなら行を指定しなくても全部処理します。 Range("A1").Select などで開始位置を指定すればマクロから自動です。 ちなみに空白を取り除くものは下の関数もあります。 =SUBSTITUTE(A1," ","")置き換え Sub 計算式をnullに() 開始位置 = ActiveCell.Address 現在行 = ActiveCell.Row 現在列 = ActiveCell.Column 最終位置 = ActiveSheet.Cells.SpecialCells(xlLastCell).Address 最終行 = ActiveCell.Row 最終列 = ActiveCell.Column For I = 現在行 To 最終行 If LenB(Cells(I, 現在列)) = 0 Then Cells(I, 現在列) = Null End If Next Range(Cells(現在行, 現在列), Cells(最終行, 現在列)).Select End Sub マクロの使い方などは質問ください。

kitunekko
質問者

お礼

さっそく試してみました。 何故か Cells(I, 現在列) = Null ではうまくいきませんでしたが、 Cells(I, 現在列).ClearContents にしたところ、並び替えが思い通りに動くようになりました。 ありがとうございました。

関連するQ&A

  • pascal二分木の課題

    レポート課題で、pascalの二分木についての問題が出たのですが、うまくソースコードを作ることができません! 誰かお手伝いよろしくお願いします! 課題:progに木をバランスよく組みなおす関数repackを追加せよ program prog(input,output); const maxRange = 100; type dataType = integer; tree = ^treeCall; treeCall = record data:dataType; left,right:tree end; var root:tree; command:char; value:dataType; function search(d:dataType; t:tree):tree; begin if t=nil then search:=nil(*ブレーク*) else if t^.data=d then search:=t(*見つけた*) else if t^.data>d then search:=search(d,t^.left)(*左を検索*) else search:=search(d,t^.right)(*右を検索*) end; procedure insert(d:dataType; var t:tree); begin (**) if t=nil then begin new(t); t^.data:=d; t^.left:=nil; t^.right:=nil end else if t^.data=d then (*すでに登録されているので何もしない*) else if t^.data>d then insert(d,t^.left) else insert(d,t^.right); end; procedure delete(d:dataType; var t:tree); var temp:tree; procedure deleteMin(var r:tree); var temp:tree; begin temp:=r; while temp^.left<>nil do temp:=temp^.left; t^.data:=temp^.data; delete(temp^.data,r) end; begin if t=nil then writeln('Not Exist.') else if t^.data=d then if (t^.left<>nil) and (t^.right<>nil) then deleteMin(t^.right) else begin temp:=t; if t^.left<>nil then t:=t^.left else t:=t^.right; dispose(temp); end else if t^.data>d then delete(d,t^.left) else delete(d,t^.right) end; procedure writeSet(t:tree); begin if t=nil then (*何もしない*) else begin writeSet(t^.left);(*左へ左へ・・・*) write(t^.data:1,' '); writeSet(t^.right)(*右へ・・・*) end end; (****** Body ******) begin root:=nil; repeat write('> '); read(command); if command in ['i','d','s','w'] then begin (*もしもコマンドがw以外なら値を読み込む*) if command='w' then readln else readln(value); case command of (*数値をバイナリーツリーに挿入 ここでソーティングしたい*) 'i': insert(value,root); 'd': delete(value,root);

  • エクセルのマクロで画像を貼り付け 

    画像をエクセルに貼り付ける作業を行っています。 マクロを使いファイル内の画像(約30枚程度)を1列づつスペースを空け 右方向に4枚 1行スペースを空け 3行目の左に戻り その位置よりまた1列づつスペースを空け右方向に4枚・・・・・ これを繰り返しファイル内の画像をすべて 貼り付けたいのですがうまく動作が出来ません。 何卒ご教授の程よろしくお願いします。 ※マクロ Sub EggFunc_pasteDirImage() ' 変数定義 Dim fileName As String Dim targetCol As Integer Dim targetRow As Integer Dim targetCell As Range Dim shell, myPath Dim pos As Integer Dim extention As String Dim isImage As Boolean ' 選択セルを取得 targetCol = ActiveCell.Column targetRow = ActiveCell.Row ' フォルダ選択画面を表示 Set shell = CreateObject("Shell.Application") Set myPath = shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\Users\0602116.MS\Desktop\") Set shell = Nothing ' フォルダを選択したら... If Not myPath Is Nothing Then fileName = Dir(myPath.Items.Item.Path + "\") Do While fileName <> "" ' ファイル拡張子の判別 isImage = True pos = InStrRev(fileName, ".") If pos > 0 Then Select Case LCase(Mid(fileName, pos + 1)) Case "jpeg" Case "jpg" Case "gif" Case Else isImage = False End Select Else isImage = False End If ' 拡張子が画像であれば If isImage = True Then ' 貼り付け先を選択 Cells(targetRow, targetCol).Select Set targetCell = ActiveCell ' 画像読込み ActiveSheet.Pictures.Insert(myPath.Items.Item.Path + "\" + fileName).Select ' 画像が大きい場合、画像サイズをセル幅に合わせる If Selection.Width > targetCell.Width Or Selection.Height > targetCell.Height Then If Selection.Width / targetCell.Width > Selection.Height / targetCell.Height Then Selection.Height = Selection.Height * (targetCell.Width / Selection.Width) Selection.Width = targetCell.Width Else Selection.Width = Selection.Width * (targetCell.Height / Selection.Height) Selection.Height = targetCell.Height End If End If ' 表示位置をセル中央に移動 Selection.Top = targetCell.Top + (targetCell.Height - Selection.Height) / 2 Selection.Left = targetCell.Left + (targetCell.Width - Selection.Width) / 2 ' 貼り付け先行を+1 targetCol = targetCol + 2 End If fileName = Dir() Loop MsgBox "画像の読込みが終了しました" End If End Sub

  • Excelの並び替え

    Excelの並び替え(フィルター機能使用)についてですが、 普通に1→2→3→…のように数字だけでしたら、問題なく並び替えられます。 しかし、画像のように枝番が含まれているとき、 どのようにすれば、ちゃんとした順番になるのでしょうか。 (画像の例だと1→2→3→10→11→…というようになってしまいます。) また、文字例が入っている場合(○○1,△△1など)も同じような現象が起きるのですが、これも対処できるのでしょうか。 よろしくお願いします。

  • エクセル 並び替えがうまくいかない。

    不法投機されたゴミの種類ごとの個数が記載されているエクセルの表を仕事で使用しています。 数が多い順に1位~3位までのゴミの種類をあげてくれと上司にいわれたので並び替えを使用し算出しようとしました。ところが右端にあるゴミの個数のみ空白行がない形でびっしり並び替えされ、並び替えされなかった左端にあるゴミの種類の項目と対応しなくなってしまいました。 そのため、結局 目視で探すことになりました。 このような一つの表であるにもかかわらず、特定の列のみ並び替えされ、連動して並び替えしてほしい列が並び替え対象外となる理由ないしは回避方法についてご存知の方がいたらご教示ください。

  • Excelでの並び替え

    Excelの5列の表があります。 この表のデータの並び替えをしたいのですが、3列目は計算式が入っているので、そのままで並び替えをしたいのですが、良い方法を教えて下さい。

  • Excel 並び替え

    横に並んでいる情報を並び替えたいです。 説明が難しいので、図に示します。 Excelの機能を使ってできるものでしょうか。 マクロを組まないと無理ですか?

  • EXCELの並び替えについて

    はじめまして。 表が自動的に並び替えれないか四苦八苦しております。 例えば、 1AB、1BD、2EF、3HI… と、続く表があるのですが、違うシートに表を作り、1から始まる値、2から始まる値をそれぞれ表に抽出していきたいのですが、全くわかりません。 いったいどうしたらいいのでしょう? 教えていただけたら幸いです。

  • エクセルの並び替え

    エクセルで野球の成績表を作っています。 打率、打点、盗塁などいろいろ項目があり、その中の打率順に並び替えるにはどうすればいいでしょうか? いちいちコピペするしかないのでしょうか?

  • エクセルの並び替えが出来ません。

    エクセル2002を使っています。データーを並べ替えようとしましたが、 「この操作には同じサイズの結合セルが必要です」と メッセージが表示されて並べ替えが出来ませんでした。 並べ替え出来る方法を教えてください。 尚、OSはWindows Meです。 宜しくお願い致します。

  • エクセルで並び替えがうまくいきません。

    エクセル2000で並び替えをしている時、先頭行の各セルの項目が「並び替え」ダイアログボックスの「優先されるキー」に表示されず、うまく並び替えることができないことがありました。また、無理やり、「最優先されるキー」のところに、たとえばE列とか入れて並び替えをさせようとしたら、セル内のデータが統一なくバラバラになってしまいました。いったんそのBOOKは捨て、再度テータを再入力したところ、今度は問題なく入力できたのですが、こなことってあるのでしょうか?大切なデータを扱っているので、以後、こんなことがないように防止策を講じたいのですが、どうしたらこんなことになるのか原因をまず知りたいと思います。どなたかご存知の方があれば、教えてください。よろしくお願いします。