• 締切済み

エクセル マクロのいれ方

エクセルを使って表を作っています。 自分のしたい事をするには、マクロを組まなくてはならないことが分かりました。 私はマクロは使ったことがないので、本来ならちゃんと勉強すべきなんですが、締め切りが迫ってるので、マクロのVBAを調べました。 したいのは、『ロックされているセル以外のデータをクリアにする』ということなんですが、その為には下記のVBA?を入れればいいらしいのです。 Sub UnlockCellClear() Dim Rng As Range For Each Rng In UsedRange   If Rng.Locked = False Then     Rng.Clear     Rng.Locked = False   End If Next End Sub ツール→マクロ→VBA→標準モジュール→Module1を開き、上記のVBAを入れてみましたが出来ませんでした。 そんな簡単なことじゃないんですかね? ど 質問の説明が下手でしたら申し訳ありません。

みんなの回答

noname#111860
noname#111860
回答No.10

>なのでこうかな? #こうかな...って、動かないし・・・。 余計なコードがあったので修正します。 ~ Sub UnlockCellClear() Dim Rng As Range For Each Rng In Range("A1:N1050") If Rng.Locked = False Then Rng.Value = vbNullString End If Next End Sub

全文を見る
すると、全ての回答が全文表示されます。
noname#111860
noname#111860
回答No.9

> もし気が向いたら教えて下さい。 大変なことが多い世の中で、 偽善と判っていても、こんな人助けがあってもいいかな・・・。 > ただ、結合したセルの一部を変更することは出来ません、となりました。 > また、クリアにするって書式もなんですね。 >書式は消さず、結合したセルにも対応させたかったのですが、 書式、というと、セルの色なども関係しちゃうので、 セルの色など変更したくない、文字の入力値のみ消したい場合は Rng.Clear を Rng.Value = vbNullString に変更するといいです。 なのでこうかな? ~ Sub UnlockCellClear() Dim Rng As Range For Each Rng In Range("A1:N1050") If Rng.Locked = False Then Rng.Value = vbNullString '★ Rng.Locked = False End If Next End Sub

全文を見る
すると、全ての回答が全文表示されます。
noname#111860
noname#111860
回答No.8

ExcelのBookで保存した後の実行イメージも載せて起きます。

liz-noise
質問者

お礼

ありがとうございました。 解りました! ただ、結合したセルの一部を変更することは出来ません、となりました。 また、クリアにするって書式もなんですね。 書式は消さず、結合したセルにも対応させたかったのですが、お願いし過ぎになっちゃいますし、既に違う質問ですので、諦めます。 もし気が向いたら教えて下さい。 ほんと色々ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#111860
noname#111860
回答No.7

>標準モジュールを開いて、そこにコピーしました。 恐らく、下の画像のようになっていると思います。 そうした状態で、Excelファイルを保存してやるといいです。 Excelファイルを保存したら、 No3で回答したように、 #メニューバーの[ツール]-[マクロ]-[マクロ(M)]をクリックします。 #もしくはAlt+F8キーでも可能です。 #そうするとちっちゃな画面が起動しますので、 #その中から、UnlockCellClearを選択して、 #「実行(R)」ボタンを起動してみてください。 (画像って二枚張れるのかな) >enterだと改行しかしないです。 が、ちょっとどのような操作をしているか伝わらないのですが

全文を見る
すると、全ての回答が全文表示されます。
noname#111860
noname#111860
回答No.6

>ツール→マクロ→Visual Basic Editer→VBAProject でVisualBasicEditorを起動したら、 MicrosoftExcelObjectを選択して、右クリック、 そうすると 挿入、標準モジュールが選択できるので、選択(左クリック)です。 詳細は、下の画像を確認をば・・・。

liz-noise
質問者

お礼

ありがとうございます。 標準モジュールを開いて、そこにコピーしました。 その後何をすれば登録になるのでしょうか。 enterだと改行しかしないです。 なんか結局こまごまとスイマセン・・・。

全文を見る
すると、全ての回答が全文表示されます。
noname#111860
noname#111860
回答No.5

>For Each Rng In Range("A1:N1050")としたら、修正候補と出てエラーでした。 ん~、こちらでも動作確認を取ってみましたが、 動いてしまいました。 念のため、新規ExcelBookに標準モジュールを追加し、 下記コードを記載し、エラーとなるか確認してみてください Sub UnlockCellClear() Dim Rng As Range For Each Rng In Range("A1:N1050") If Rng.Locked = False Then Rng.Clear Rng.Locked = False End If Next End Sub #Excel2003で動作確認しています。

liz-noise
質問者

お礼

ごめんなさい、色々やってたら混乱してきました。 凄い初歩なんですが、 ツール→マクロ→Visual Basic Editer→VBAProject→ThisWorkbookを開いてそこに入れるんですよね。 それでEnterでいいんでしたっけ? 改行するばかりで決定しなくなっちゃいました。

全文を見る
すると、全ての回答が全文表示されます。
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.4

ツール→マクロ→マクロ で、リストから UnlockCellClear 選んで実行すれば良いです。

全文を見る
すると、全ての回答が全文表示されます。
noname#111860
noname#111860
回答No.3

>なので、ショートカットキーの設定をして、手動で? メニューバーの[ツール]-[マクロ]-[マクロ(M)]をクリックします。 もしくはAlt+F8キーでも可能です。 そうするとちっちゃな画面が起動しますので、 その中から、UnlockCellClearを選択して、 「実行(R)」ボタンを起動してみてください。 実行の仕方は以上ですが、 ちょっとマクロの方にも問題がありそうですね UsedRangeに編集を行なうセルの対象範囲が設定されていないので マクロがエラーとなってしまうと思います。 ので範囲を指定しちゃいましょう 例えば、A1~F20の間のセルだけを対象にしたいのであれば For Each Rng In UsedRange を For Each Rng In Range("A1:F20") のようにしてみてください。

liz-noise
質問者

お礼

ありがとうございます。 For Each Rng In Range("A1:N1050")としたら、修正候補と出てエラーでした。 範囲が広すぎるんでしょうか・・・?

全文を見る
すると、全ての回答が全文表示されます。
  • boro-pc
  • ベストアンサー率30% (64/208)
回答No.2

セルの書式設定で保護られてないヤツが消えりゃ良いんですか? Excel2000ですけど質問文のコードで動きますよ… まぁ3行目のUsedRangeをホントの範囲に指定してやんないとダメですが… 例:Range("a1:Z100") >出来ませんでした。 は何がどうしてどう動かないのか具体的に書いた方が良いですよ そうすると全国のえくせらーな人たちがガンガン回答してくれます

全文を見る
すると、全ての回答が全文表示されます。
noname#111860
noname#111860
回答No.1

そのマクロは、何をやった時に起動すればよいのでしょうか? 例えば、Excelのファイルが開かれた時に実行したいのであれば、 標準モジュール、 Sub Auto_Open Call UnlockCellClear End Sub と記述してやればよいと思います。 ボタンがクリックされた時、セルの値が変更されたときなど、 マクロを実行したいタイミングによって、 呼び出す元が異なりますので、ご注意を

liz-noise
質問者

お礼

早速ありがとうございます。 建築業で、それぞれ工事の工事名、原価等を表に入れているのですが、 月毎にそのデータを更新する為、項目名だけ残して、中身だけ変えたいのです。 なので、ショートカットキーの設定をして、手動で?(という言い方は変ですが、自分のタイミングで)起動したいです。 よろくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAでLockされてないセルをClearContents

    エクセル2000です。 シートでロックされていないセルだけ中身を削除するマクロを作っています。以下でも一応作動はするのですが、いちいちForNextでまわさずにできないものかと質問させていただきました。 よろしくお願いします。(o。_。)oペコッ Sub クリアテスト() Dim c As Range For Each c In ActiveSheet.UsedRange If c.Locked = False Then c.ClearContents End If Next End Sub

  • マクロ実行が遅い・・・

    皆さんにおしえてもらいながら下記のようなマクロを組みました。 しかし、マクロを実行すると計算中が長いのです。 もしこのマクロに原因があれば教えてください。 よろしくお願いします。 -------------------------- Sub 見積書作成() Sheets("見積書").Select '見積書シートを選択 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 If Cells(i, 5).Value = "0" Then '工数が「0」のときは Rows(i).RowHeight = 0 '行高さ「0」 End If Next For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 Range("E8:E55") = Application.Round(Range("E8:E55"), 0) '工数を四捨五入 Next Dim Rng As Range Const Retu = "C" '<--- ここで「小計」の列を指定します。 For Each Rng In Range(Retu & "1", Range(Retu & "65536").End(xlUp)) If Trim(Rng.Value) = "小   計" And _ Rng.Offset(, 6) = 0 Then Rng.EntireRow.Hidden = True End If Next Rng End Sub

  • Excelマクロについて

    先日、OKWEBで教えてもらったマクロに手を加えて作ろうとしたのですが、エラーがでて動かなくなりました。 わかる方がいましたら教えてください。 よろしくおねがいします。 Sub 見積書() Application.ScreenUpdating = False '見積書(完成)シートを選択 Sheets("見積書(完成)").Select '行の高さを「15」にする。 Rows("6:67").Select Range("F6").Activate Selection.RowHeight = 15 'S列のS6:S56をコピーしてE6:E7に貼り付ける。 Range("S6:S56").Select Selection.Copy Range("E6:E7").Select ActiveSheet.Paste '5列目(工数)が「0」のとき該当する行の高さを「0」にする。 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 If Cells(i, 5).Value = "0" And Cells(i, 7).Value = "0" Then Rows(i).RowHeight = 0 End If Next '「E8:E55」の範囲を四捨五入する。 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 Range("E8:E55") = Application.Round(Range("E8:E55"), 0) '工数を四捨五入 Next 'C列の中に含まれる「小計」を検索しそこから6列目が「0」だったら行の高さを「0」にする。 Dim Rng As Range Const Retu = "C" For Each Rng In Range(Retu & "1", Range(Retu & "100").End(xlUp)) If Trim(Rng.Value) = "小   計" And _ Rng.Offset(, 6) = 0 Then Rng.EntireRow.Hidden = True End If Next Rng End Sub

  • 行ごとに保護するマクロにパスワードを付けたい

    Excel2010を使用しております。 A列に「承認」という文字が入ると、その行が保護されるマクロがあります。 今の状態ですと、[校閲]-[シート保護の解除]を押すと解除されてしまいますので 保護を解除する際にパスワードを設定したいのですが上手く行きません。 どうかお助け下さい。宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r, rng As Range Set rng = Intersect(Target, Columns(1)) If Not rng Is Nothing Then If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For Each r In rng If r.Value = "承認" Then r.EntireRow.Locked = True Else r.EntireRow.Locked = False End If Next r ActiveSheet.Protect DrawingObjects:=True, Contents:=True, AllowFormattingCells:=True End If End Sub

  • エクセルのマクロについて教えてください

    お世話になっております。 エクセルのマクロについて教えていただきたいのですが、 サンプルのファイルをこちらにアップしたのでよろしければご覧になってください。 http://kie.nu/yPV 質問したいことは、列Iに、各行の黄色いセルの数を表示させるマクロを作りたいのですが 途中まで何とかわかったのですがどうもうまくいきません。。 行11から各行にひとつずつ、黄色いセルが含まれていますが、その黄色いセルの中の数字を列Iに表示させたいです。行にデータがある限り、下までずっとです。 以下、途中までわかったマクロです。 Sub 黄セル値Copy() Const TgLeftUp = "A3" '<--対象範囲左上セル指定 Dim Rng As Range Dim Target As Range Set Target = Range(TgLeftUp, Cells(Rows.Count, _ Range(TgLeftUp).Column)) For Each Rng In Target.Resize(, 2) If Rng.Interior.ColorIndex = 6 Then If Rng.Column = Target.Column Then Rng.Offset(, 3).Value = Rng.Value Else Rng.Offset(, 2).Value = Rng.Value End If End If Next MsgBox "値 貼り付け完了。", vbInformation Set Target = Nothing End Sub でもこれを貼り付けてもうまくいきません。 正しいマクロを教えていただけないでしょうか?? 宜しくお願いいたします。 ※いつも、私の質問に対してまるで回答になってないような、ふざけた言葉を書き込んでは消してる方が一名だけいらっしゃいます。確か、鳥の写真をマイページに載せてる方です。 都度違反報告はしていますが、質問の趣旨に反する回答をされてる方一名、絶対にやめてください。

  • 自前設定マクロはセキュリティー上、問題ないのか?

    セル内に256文字以上の文字を入力する場合、以下のマクロ設定を行ないますが、マクロセキュリティが”高”に設定している場合、送信先にて開いた場合、マクロが無効となってしまいます。 もちろん、セキュリティを低に下げても良いのですが、本当に大丈夫かという確証がありません。(大丈夫であれば、セキュリティを下げて運用せざるえないのでしょうか。) もし、セキュリティーを”高”の状態で以下のマクロ設定が無効になったりしないようにすることはできるのでしょうか。教えてください。 また、セキュリティーを下げるしかない場合は、それでなんら問題ないのでしょうか(なぜ、マイクロソフトは「推奨しない」とわざわざ記載しているのでしょうか。運用する皆さんが心配性なので教えてください) :********************************************** シートタブを右クリック、コードの表示を選択 出てきたシートモジュールにコピペ 表示形式は標準に戻す Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range If Not Intersect(Range("a1:a10"), Target) Is Nothing Then Application.EnableEvents = False For Each Rng In Target Rng.Value = "故障状況" & Rng.Value Next Application.EnableEvents = True End If End Sub **************************************** VBEにてマクロコードをコピーペーストします。 '標準モジュール Option Explicit Sub try()   Dim r As Range   If TypeName(Selection) = "Range" Then     With Selection       .NumberFormat = "general"       For Each r In .Cells         If r.Value <> "" Then           r.Value = "故障状況" & r.Value         End If       Next     End With   End If End Sub

  • エクセルVBAでUsedRange内の可視セルを指定する方法

    UsedRange内の可視セル限定で、ロックされていない場合、データをクリアしたいのです。 以下のようなコードを書いてみましたがSpecialCellsのところでコンパイルエラーになってしまいます。 どのように直せばよいのでしょうか? Sub シートクリア() Application.Calculation = xlCalculationManual Application.EnableEvents = False For Each c In Intersect(SpecialCells(xlCellTypeVisible), ActiveSheet.UsedRange) If c.Locked = False Then c.MergeArea.ClearContents End If Next Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True End Sub

  • エクセルマクロのCallとコンパイルエラー

    エクセルマクロのCallとコンパイルエラー よく、教えていただくのですが作ったマクロを呼び出すのに、 ・Call 作成したマクロ とか教えてもらいますが 標準モジュールのツリーには ・Module1 ・Module2 ・オートオープン ・リセット とかがあって ・Call リセット とかにして実行すると ・コンパイルエラー (モジュールではなく、変数またはプロシージャを指定してください) となってしまいます。 Callの後にはどういう風にすればいいのでしょうか? -------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$5" And Len(Range("B5").Value) > 1 Then Call 印刷←印刷はModule2です。 End If End Sub ------------- で印刷のマクロの一部に Call リセット をつけたたしたらなりました。 よろしくお願いします。

  • エクセルのマクロで

    お世話になります 下記のマクロで実行した所 100まで書式設定で保護、ロックしたいのですが b3:l3はロックするものの 4行目以降はロックしません どうしたらいいでしょうか もう1つ、このシートはいつもc3からはじめたいのですが If ActiveCell.Value >= "" Then の部分はどうしたらいいでしょうか よろしくおねがいいたします 初心者でバカな質問ですみません Sub マクロ1() Dim i As Integer For i = 1 To 100 If ActiveCell.Value >= "" Then Range("B3:l3").Select Selection.Locked = True Selection.FormulaHidden = False End If ActiveCell.Offset(1, 0).Select Next End Sub

  • Excel VBAについて。

    VBAに詳しい方に質問です。 次の2つのプログラムが何をしているのか詳しく教えて下さい。 Sub Macro1() Sheets("Sheet1").Range("A1").QueryTable.Refresh BackgroundQuery:=False End Sub ------------------------- Function LNK(rng As Range) LNK = rng.Hyperlinks(1).Address End Function