質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.83%

  • VBA

    1575questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1348questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

データ挿入、データ削除をボタンで行う。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 258

VBA初心者です。
現在、スコア(球技)の集計をしたいと思い
表にファイル内のデータを指定の位置に挿入する。というものを実現したいのですが
色々試したのですが、なかなかうまくいきません。
・ボタンを押すと初めは挿入できるが、2回目以降はセルがずれてしまう。
・保存方法のせいなのか、エクセルを閉じ再び立ち上げるとマクロが無効になっている。
などなど、イマイチ理解できていない状況です。

今回の処理の流れとしまして
・あらかじめ表を作成しておく(編集できないようにしたい)
・PC上のデータファイル(.csv)を[挿入ボタン]で表に挿入する
・[削除ボタン]にて挿入したデータを一括削除する

これは難しいでしょうか?できそうなのですが、初心者が故に成功しません。
ご教授いただける方よろしくお願いします。
当方、Excel 2011 for Macを使用しているのですが
Excel 2013も使用可能です。

開発環境:Excel 2011 for Mac , MacBookPro

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ご質問の内容だけでは要件を正確に把握することができなかったのですが、
わかる範囲で以下のコードを書きました。
コメントもしっかり書いたので理解可能だと思います。
これをベースに 15DB109_hotaka さんの実施したい内容をコード化すれば実施したいことができると思います。
ボタンについては、ご自身で作成された上で 
[挿入ボタン] に対しては「ImportCsvFile」
[削除ボタン] に対しては「DeleteCsvData」
を登録すれば実行可能になるはずです。

>・保存方法のせいなのか、エクセルを閉じ再び立ち上げるとマクロが無効になっている。
これについてはExcelの設定が原因と思われます。ここを参照して解決できませんか?

Option Explicit

' CSVファイルの1行目をコピーするかを設定してください
' (通常は各列の題名が記載されている行なのでコピー不要と思っています)
Private Const NEED_HEADER As Boolean = False

' CSVファイルのの内容をシートにインポート
Public Sub ImportCsvFile()

    ' 変数宣言
    Dim csvBook As Workbook
    Dim csvSheet As Worksheet
    Dim activeWorksheet As Worksheet
    Dim activeCell As Range
    Dim csvBookPath As String

    ' インポート処理を実施して良いかの確認ダイアログ
    ' (NO が選択された場合は処理終了)
    If MsgBox("選択されたセルにCSVデータをインポートしてよろしいですか?", vbQuestion + vbYesNo, "確認") = vbNo Then
        Exit Sub
    End If

    ' アクティブシートを取得
    Set activeWorksheet = ActiveSheet

    ' 貼り付け対象セルを取得
    On Error Resume Next
    Set activeCell = Selection
    On Error GoTo 0

    ' 貼り付け対象セルが取得できない場合は処理終了
    If activeCell Is Nothing Then
        MsgBox "セルが選択されていないため処理を継続できません", vbExclamation + vbOKOnly, "処理失敗"
        Exit Sub

    End If

    ' CSVファイルパスを取得
    csvBookPath = Application.GetOpenFilename(FileFilter:="CSV ファイル, *.csv?")

    ' CSVファイルパスが入力されなかった場合は処理終了
    If csvBookPath = "" Then
        MsgBox "CSVファイルが選択されなかったので処理を終了します", vbExclamation + vbOKOnly, "処理失敗"
        Exit Sub

    End If

    ' 処理高速化のために画面描画をオフ
    Application.ScreenUpdating = False

    ' CSVファイルを開く
    Set csvBook = GetCsvBook(csvBookPath)

    ' CSVファイルが開けなかった場合は処理終了
    If csvBook Is Nothing Then
        MsgBox "CSVファイルを開けなかったので処理を終了します", vbExclamation + vbOKOnly, "処理失敗"

        ' 画面描画を再開
        Application.ScreenUpdating = True
        Exit Sub

    End If

    ' CSVデータが記載されたシートを取得
    Set csvSheet = csvBook.Worksheets(1)

    ' アクティブシートのロックを解除
    activeWorksheet.Unprotect

    ' CSVの内容をアクティブシートに貼り付け
    With csvSheet.UsedRange
        csvSheet.Range(csvSheet.Cells(IIf(NEED_HEADER, 1, 2), 1), .Cells(.Cells.Count)).Copy activeCell
    End With

    ' CSブックを閉じる
    csvBook.Close False

    ' アクティブシートのロックを実施
    ProtectSheet ActiveSheet

    ' 画面描画を再開
    Application.ScreenUpdating = True

End Sub

' CSVファイルのデータを一括削除
' (但し柔軟性を持たせるために選択した範囲のみを削除できるようにする)
Public Sub DeleteCsvData()

    ' 変数宣言
    Dim activeWorksheet As Worksheet
    Dim activeCell As Range

    ' 削除処理を実施して良いかの確認ダイアログ
    ' (NO が選択された場合は処理終了)
    If MsgBox("選択されたセル削除してよろしいですか?", vbQuestion + vbYesNo, "確認") = vbNo Then
        Exit Sub
    End If

    ' アクティブシートを取得
    Set activeWorksheet = ActiveSheet

    ' 削除対象セルを取得
    On Error Resume Next
    Set activeCell = Selection
    On Error GoTo 0

    ' 削除対象セルが取得できない場合は処理終了
    If activeCell Is Nothing Then
        MsgBox "セルが選択されていないため処理を継続できません", vbExclamation + vbOKOnly, "処理失敗"
        Exit Sub
    End If

    ' 処理高速化のために画面描画をオフ
    Application.ScreenUpdating = False

    ' アクティブシートのロックを解除
    activeWorksheet.Unprotect

    ' 選択されたセルを削除
    ' (空行ができないように削除された箇所以降を上にシフト)
    activeCell.Delete xlShiftUp

    ' アクティブシートのロックを実施
    ProtectSheet ActiveSheet

    ' 画面描画を再開
    Application.ScreenUpdating = True

End Sub

' シートをロック(許可したい操作によってここの処理は変更してください)
Private Sub ProtectSheet(ByRef pSheet As Worksheet)

    With pSheet
        .Protect
    End With

End Sub

' CSVブックを開く(失敗した場合は Nothing を返却)
Private Function GetCsvBook(ByRef path As String, Optional password As String = "") As Workbook

    ' 変数宣言
    Dim book As Workbook

    ' ブックを開く
    On Error Resume Next
    Set book = Workbooks.Open( _
                Filename:=path, _
                UpdateLinks:=0, _
                ReadOnly:=True, _
                password:=password, _
                IgnoreReadOnlyRecommended:=True, _
                AddToMru:=False)
    On Error GoTo 0

    ' 結果返却
    Set GetCsvBook = book

End Function

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/07 03:11

    ありがとうございます!コメントまでほんとにわかりやすく、初心者の私にはとても嬉しいです。
    試してみます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    エクセルについて。

    こちらで質問するのが適切なのか分からないのですが、 すでに統計されているエクセル上での表があるとして (仮に縦5列横2列とします) ある縦列に文字列がそれぞれ別々の文字量(15文

  • 解決済

    エクセルからマクロで文章のフォントを指定しパワーポイントのファイルを作成させたい

    エクセルからパワーポイントを操作し、 エクセルに入力されている内容でパワーポイントを作成するマクロを作りたいと思っています。 エクセルのセルには文章、フォント種類、フォントサイズ

  • 解決済

    Excelで同じ数ごと列を増やしたい

    こんにちわ Excelで同じ数ごと列を増やしたいです。 この左側にあるデータを、右側のようにしたいです 連続する数字を増やすやり方はでてくるのですが、 連続

  • 解決済

    Excelにて対象データを入れ替えたい

    対象のセルを比較し同じものを同じ行にしたい お世話になります。 内容は表題の通りなのですが具体的に言うと 1  1 2  4 3  3 4  9 5  8

  • 解決済

    Excel 文字に値を設定

    ExcelでもJavaのようにA=5、B=2を設定しA+B=7のように計算できないのでしょうか?例えば この様な計算です。 方法があればご教示願います。

  • 解決済

    Excel セルに半角英数字とカンマのみ入力可能にする方法

    使用Excelバージョン Excel2016 OS windows10 いつもお世話になっております。 ただ今エクセルで入力規制を行おうとしています。 入力規制の内容は半角英数

  • 受付中

    なぜWBSをExcelで書くのでしょうか?

    こんにちは。  なぜWBSをExcelで書くのか。 代替案はあるのでしょうか? わたしが思うに、WBSはプロジェクトのなかの仕事を管理可能な単位に細分化して、理解したり共有した

  • 解決済

    Excel重複データのチェック

    エクセルで特定の列のセルにデータを入力した時に、同じ列内に重複データがある場合、 重複データの行の色を変えて、更に可能であれば、アラートで「●個目の重複データです」と表示させたいの

同じタグがついた質問を見る

  • VBA

    1575questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1348questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。