스프레드시트에서 행을 편집할 때 날짜 스탬프

스프레드시트에서 행을 편집할 때 날짜 스탬프

해당 행 내의 셀이 변경되는 즉시 각 행에 대한 날짜 스탬프가 필요한 스프레드시트가 있습니다. 예를 들어 셀 B14, E14 또는 G14에서 내용을 변경하면 오늘 날짜가 K14에 표시됩니다. 당연히 영향을 받을 행과 열의 범위를 선택할 수 있어야 합니다.

하지만 제 경우에는 오늘 날짜가 표시되어야 한다는 점이 좀 복잡합니다.오직내가 언제추가하다또는변화셀의 정보입니다. 내가 그냥삭제정보를 삭제하기 전과 동일하게 유지하려면 날짜가 필요합니다.

PS 파일은 엑셀 스프레드시트이지만 구글 드라이브에서 사용됩니다.

답변1

이 답변은 Google 시트로 바로 이동하는 경우입니다.

이것이 올바른 방향으로 나아가는 데 도움이 될 것이라고 생각합니다. 모니터링할 필드가 시트 주위에 흩어져 있다고 말하는지, 아니면 참조한 인접하지 않은 셀이 범위 내의 예일 뿐인지 확실하지 않습니다. 주위에 셀이 뿌려져 있는 경우 코드에서 언급한 대로 여러 개의 "감시 범위"를 만들고 편집 중인 셀이 최소한 하나의 범위 내에 있는지 확인해야 합니다. 그렇지 않으면 함수에서 돌아갑니다.

다중 셀 범위에서 모든 값 삭제를 지원하기 위해 이 작업을 수행하기 위해 추가 길이를 사용하지 않았다는 점에 주목하고 싶습니다.

또한 Google 시트 내의 도구 -> 스크립트 편집기로 이동한 다음 리소스 -> 트리거(메뉴는 이전에 수행한 작업에 따라 다를 수 있음)로 이동하여 "onEdit()" 트리거를 추가해야 합니다. 시트에.

그러면 함수는 다음과 같이 진행됩니다.

function onEdit(e){
  var DateCol = "K";
  var DeletedColNote = "L";
  var curDate = Utilities.formatDate(new Date(), "GMT-5", "MM/dd/yyyy") 
  var editRange = e.range;
  var rowIndex = editRange.getRowIndex();
  var colIndex = editRange.getColumnIndex();

  // May need to set up multiple ranges like this and check all ranges if
  // checked fields are not in adjacent cells
  var watchRange = { // B2:G20
    top : 2,         // start row
    bottom : 20,     // end row
    left : 2,        // start col
    right : 7        // end col
  };
  // Exit if we're out of range
  if (rowIndex < watchRange.top || rowIndex > watchRange.bottom) return;
  if (colIndex < watchRange.left || colIndex > watchRange.right) return;

  var currentValue = editRange.getValue();
  currentValue = currentValue.replace(/^\s+|\s+$/g,""); //"trim" kludge

  if (currentValue.length == 0)
  {
    // Set a column to show when data was deleted
    SpreadsheetApp.getActiveSheet().getRange(DeletedColNote + rowIndex).setValue("Deleted: " + curDate);
  }
  else
  {
    // Set a column to show last edit date
    SpreadsheetApp.getActiveSheet().getRange(DateCol + rowIndex).setValue("Edited: " + curDate);
    SpreadsheetApp.getActiveSheet().getRange(DeletedColNote + rowIndex).setValue("");
  }
}

답변2

안타깝게도 VBA는 Google Sheets로 포팅되지 않지만 Google Sheets 요구 사항이 면제되면 VBA로 수행하는 것은 매우 간단합니다.

관심 있는 워크시트에 대한 WorkSheet_Change 이벤트에 이 코드를 첨부하세요.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim RngToMark As Range
' define the range you want to track changes for
    Set RngToMark = ActiveSheet.Range("A1:G30")
' make sure the change occurred inside the range
    If Intersect(Target, RngToMark) Is Nothing Then Exit Sub
' ignore deleting the contents
    If Target.Value = "" Then Exit Sub
' mark the row as changed
    ActiveSheet.Range("K" & Target.Row).Value = Format(Now(), "MMM-DD-YYYY")

End Sub

이것을 삽입할 올바른 위치에 도달하려면...

  1. VBEditor에서 "Microsoft Excel 개체" 아래의 워크시트 이름을 두 번 클릭합니다.
  2. 그런 다음 왼쪽 드롭다운에서 워크시트를 선택합니다.
  3. 그런 다음 오른쪽 드롭다운에서 변경을 선택합니다.

관련 정보