エクセル2000を使っているのですが,マクロの使い方がよくわかりません.
コピーペーストしてきた大量の文字行列の先頭末尾に余分な空白があって正しくソートされません.そこで,Trimを使おうと思ったのですが,使い方がいまいちよくわからず,エラーが出て実行できません.
また,重複した内容のセルを抽出・削除もしたいのです.

どうぞ教えてくださいm(_ _)m

このQ&Aに関連する最新のQ&A

A 回答 (5件)

空白を削除するセルを選択して、下記のマクロを実行します。

空白を除いた文字に書き換えます。
蛇足ですが、セルを選択する時は、先頭セルを選択して、Shift+Ctrl+↓等で連続エリアが選択できます。
また、Ctrlキーを押しながらマウスで飛び飛びに選択できます。

Sub 空白を除去()
Dim rg As Range 'セル
For Each rg In Selection
rg = Trim(rg) '左右の空白を削除
Next
End Sub

Trimに関する関数には以下のものがあります。必要なものを使い分けてください。
  Trim(rg) 左右の空白を削除(VBA)
  RTrim(rg) 右の空白を削除(VBA)
  LTrim(rg) 左の空白を削除(VBA)
  Application.Trim(rg) 左右、途中の空白を削除(ワークシート関数)
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

そう、これです、もう、とっても感謝します(^^)

お礼日時:2001/07/02 14:19

選択範囲(単一列)に同じ値があると2つ目以降について、その行を削除してしまいます。



重複を調べる列のデータ範囲を選択して、下のマクロを実行します。
標準モジュールに貼り付ければ、どのシートについても実行できるはずです。質問の意味はこういうこと?

Sub 同一値がある行の削除()
Dim rg As Range '選択範囲
Dim cot As Long 'カウンタ
Set rg = Selection
Application.ScreenUpdating = False
With rg
For cot = .Count To 1 Step -1
If Application.CountIf(Range(.Cells(1, 1), .Cells(cot, 1)), .Cells(cot, 1)) > 1 Then
Rows(.Cells(cot, 1).Row).Select: Selection.Delete Shift:=xlUp
End If
Next
.Cells(1, 1).Select
End With
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

たびたびありがとうございました。
おかげさまで、勉強もできましたし、目的も達成できましたm(__)m

お礼日時:2001/07/06 01:35

同一データの削除については、A1から下方向にデータがあるとすると、B1に


=IF(COUNTIF($A$1:A1,A1)>1,"*","")
として、データ分コピーします。あとはオートフィルタを使い「*」だけを出して削除すれば重複データを除けます。これもマクロで行いたい?

この回答への補足

マクロで出来るなら、教えてほしいと思います。。。度々すみません(^^;)

補足日時:2001/07/02 14:19
    • good
    • 0

Masazo-さんに便乗です。



下方向へのコピーが大量なら、セルB1の右下の■(フィルハンドルという)を
ダブルクリックするとOKです。(途中に空白があったらだめですけど)

確認にはCtrlキーを押したまま、↓キーを押すと最終行までジャンプできます。

> がいまいちよくわからず,エラーが出て実行できません.
このエラーが何なのか、気になります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
フィルハンド、知りませんでした。便利ですね!覚えておきます。

VisualBasicEditorでマクロを作ろうと思い、

Sub 空白を除去
(ここをどうにかしてセルの内容をTrimしたものと置き換えたい)
End Sub

をどうにかこうにかしたのですが、技術力不足のせいで出来ません(;;)

お礼日時:2001/07/02 11:44

Trimだけなら・・・。


A1に貼り付けた値に対して、B1に「=Trim(A1)」を設定します。
後は下方向にコピーする。

Trimだけなら、マクロではなく、ワークシート関数の方が楽です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
それでも出来ることは出来るのですが、文書が大量に(A~Zまで26個)あるので、マクロで出来たら便利かなと思っています。それに、=Trimでやると、Trimされたセルの内容をTrimされる前の内容とをコピペで置き換えられないんです(私には)。

他に方法はないでしょうか?

お礼日時:2001/07/02 11:39

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcelのマクロでrangeの選択がうまくいきません。

excelのマクロでrangeの選択がうまくいきません。
以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。

Sub testcopy()
Worksheets("sheet1").Range("B3:C10").Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Sub testcopy2()
Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
---------------
●testcopy●

これが動作するのは
Sheet【2】がアクティブな状態で実行する場合です

Sheet【1】がアクティブな状態で実行すると
  Worksheets("sheet2").Range("e5").Select
ここで、問題点(1)の理由によりエラー。
で、先ずシートを選択、次にセルを選択と2段階にしないといけません。

  Worksheets("sheet2").Select
  ActiveSheet.Range("E5").Select

----------------
●testcopy2●

▼Sheet【1】がアクティブな状態で実行
  testcopyと同じ場所、同じ理由でエラー

▼Sheet【2】がアクティブな状態で実行
  Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
  ここで、問題点(2)により、エラー。
 
 Cellsの前にシートオブジェクトがないので
 Cells(3, 2), Cells(10, 3)はアクティブなSheet【2】のセルとみなされ
 (★実際はちょと違う場合もありますが今回はそう★)

 Worksheets("sheet1").Range(  ← Sheet【1】
 Cells(3, 2), Cells(10, 3))   ← Sheet【2】

このようにSheet【1】【2】が混在していることになり、エラー
で、Cellsの前にシートを付加してセルがどのシートのセルか明示してやる

Worksheets("sheet1").Range(Worksheets("sheet1").Cells(3, 2), Worksheets("sheet1").Cells(10, 3)).Copy
  
---------------------------------
で、質問者のコードを修正すると
'-------------
Sub testcopy()
 Worksheets("sheet1").Range("B3:C10").Copy
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'-------------

Sub testcopy2()
 With Worksheets("sheet1")
   .Range(.Cells(3, 2), .Cells(10, 3)).Copy
 End With
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'--------------

●ただ今回のような単純なコピーの場合は
 既出の回答にあるようにSelectなしで書くのがふうつです。
'-----------
Sub testcopy111()
 Worksheets("sheet1")
   .Range("B3:C10").Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------
Sub testcopy222()
 Worksheets("sheet1")
  .Range(.Cells(3, 2), .Cells(10, 3)).Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------

今回の件は重要事柄ですので覚えておきましょう。
以上です。
 

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
-...続きを読む

QExcel 列がA,B,C...ではなく1,2,3になっている。これを直すには

通常
A B C D E
1
2
3
4
5
のようになっているのですが、
1 2 3 4 5
1
2
3
4
5
となっています。処理等問題はないのですが、
セル指定が指定のセルからの位置指定になってしまい
RC[1]:RC[1]のようになったりしています。

通常のように戻すにはどうしたらいいのでしょうか

Aベストアンサー

[ツール]-[オプション]-[全般]で、
[R1C1参照形式を使用する]をOFF。

QRange("K" & TR).Formula = で、セルにマクロで式を書きたいのですが

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

Aベストアンサー

No.1です。申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"

Qエクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という

エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1,3,1というような順番で数字が並んでいます。

その数字の中で、1→3と3→1になるものがいくつあるか求めたいのですが、出す関数・マクロがわかりません。
教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんばんは!

>A列の中に
とは行方向に数値が入っている!というコトでしょうか?

そうであれば
表示したいセルに
=COUNTIFS(A1:A1000,1,A2:A1001,3)+COUNTIFS(A1:A1000,3,A2:A1001,1)
としてみてください。

「1」の次の行が「3」の場合と
「3」の次の行が「1」の場合をプラスしています。m(_ _)m

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む

Qエクセル2003で並べ替えする場合で、空白行を先頭ではなく末尾に表示し

エクセル2003で並べ替えする場合で、空白行を先頭ではなく末尾に表示したい。
IF文で計算結果が「空白」となる計算式が入っているセルを含めて並べ替えした場合、先頭に表示されます。 これを末尾に表示されるようにするにはどうしたら良いのでしょうか。教えて下さい。

Aベストアンサー

限定的に出来る事としては,
手順:
いまスペースが「上」にある状態で,ともかく並べ替えます
実際のデータのセル範囲を選びます
ユーザー設定リストに追加します
 (2003までのエクセルではツールメニューのオプションのユーザー設定リスト)
(2003までのエクセルでは)データメニューの並べ替えを開始し,
  オプションを開き,
  いま登録したリストを指定して,
そして並べ替えさせます。




>並べ替えると

「昇順」で並べ替えると,
数値の昇順 → ”” → 文字の昇順 → エラー値
の順になります。

「降順」で並べ替えると,
エラー値 → 文字の降順 → ”” → 数値の降順
の順で並びます。

特別なオプションで,「文字で記入されているけど数値に読み替え可能」な数字文字列については,数値の並びに入れる事も出来ます。


どんなデータをどっち順で並べたいのかご相談に書かれていませんが,こういった特性を生かしてデータや並び順を作成すれば対応できるかも?しれません。たとえば,""を計算させずNA()などを入れておき,書式によってエラー値が表示されないようにしてみるなどの手立ても可能かも知れません。

限定的に出来る事としては,
手順:
いまスペースが「上」にある状態で,ともかく並べ替えます
実際のデータのセル範囲を選びます
ユーザー設定リストに追加します
 (2003までのエクセルではツールメニューのオプションのユーザー設定リスト)
(2003までのエクセルでは)データメニューの並べ替えを開始し,
  オプションを開き,
  いま登録したリストを指定して,
そして並べ替えさせます。




>並べ替えると

「昇順」で並べ替えると,
数値の昇順 → ”” → 文字の昇順 → エラー値
の順になります。...続きを読む

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい

QExcelで、先頭と末尾に0を入力する方法をお願いします

Excelで、先頭と末尾に0を入力する方法をお願いします

初めて投稿させて頂きます。とある倉庫で働いています。
Excelで、先頭と末尾に0を入力する方法を教えて下さい。
職業柄、普段あまり使わないExcelを使ったフォームで商品のロットを入力したいのですが、例えばそれが「0124A」だったり「124A0」だと、両方とも0が省略されてしまい、「124A」になってしまうのです。

これを上記のように「0124A」や「124A0」と表示出来るようにするにはどのようにすれば良いのでしょうか?
お恥ずかしい質問ではありますが、宜しくお願い致します。

Aベストアンサー

方法がいくつかあります。

・先頭に文字 ' を付ける
  入力の時にまず '(<Shift>+7) を入力して下さい。
  普段の表示では現れません。

・セルの書式設定を「文字列」にする
  そのセルを選択し<Ctrl>+1 で書式設定の子ウィンドウが開くので
  タブ「表示形式」で「文字列」を選択します。
  複数セルを選択しておけばいっぺんに設定できます。

Qエクセルのマクロ(range)について

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S       U     V
個数 金額  累計個数 金額金額 (=M+Q) (=O+S)
0、   0、   100、   1000、    100、   1000 
1,初期状態

10、  100、  100、   1000、    110、   1100
2,個数を入力すると、計算式を入力してあるUとVの数が変わる

10、  100、   110、   1100、    120、   1200
3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。

0、   0、    110、   1100、   110、    1100
4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。     


なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、
2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。
通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、
マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。
なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。
また、QやSをUやVへ書き込んでいないのでしょうか。

どなたか詳しく教えていただけると幸いです。

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S...続きを読む

Aベストアンサー

プログラミング言語では、一般的に、
「=」は、右辺から左辺への「代入」
を意味します。

マクロ = Visual Basic = プログラミング言語
なので、Excelにおける「=」とは少し意味合いが違っています。

Qエクセルの列表示を1,2,3,からA,B,C,に戻したい。

初期状態では、エクセル行は1,2,3,~、列はA,B,C,~となっていると思いますが、先日知り合いからもらったエクセルファイルは列も1,2,3,~となっていました。
どうしたら、A,B,C,~に戻せますでしょうか?
教えて下さい。

Aベストアンサー

「ツール」→「オプション」→「全般タブ」で「R1C1参照形式を使用する」のチェックを外して下さい


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報